《JSP实用教程(第2版)/耿祥义》错误之处理汉字乱码

原书部分摘录

JSP内置对象
3.1.2处理汉字信息
避免出现汉字乱码问题有两种解决方法:
1)使用page指定Context Type属性的值时
<%@ page contentType="text/html;Charset=GB2312" %>
即将其中出现的Charset中的首字母大写。
2)<%@ page contentType="text/html;charset=GB2312" %>
即将其中出现的charset中的首字母小写。然后内置对象request将获取的信息重新编码,即用ISO-8859-1编码,并存放到字节数组中;再将数组转化成字符串对象。
String str=request.getParameter("boy");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);

第一种方法应该是个错误

以下摘自JSP2.2规范
页编译指令中contentType部分

contentType
Defines the MIME type and the character encoding for the response of the JSP page, and is also used in determining the character encoding of the JSP page. 
Values are either of the form “TYPE” or “TYPE;charset=CHARSET”with an optional white space after the “;”. “TYPE” is a MIME type, see the IANA registry at http://www.iana.org/assignments/media-types/index.html for useful values. “CHARSET”, if present, must be the IANA name for a character encoding.
The default value for “TYPE” is “text/html” for JSP pages in standard syntax, or “text/xml” for JSP documents in XML syntax. If “CHARSET” is not specified, the response character encoding is determined as described in Section JSP.4.2, “Response Character Encoding”.
The corresponding JSP configuration element is default content- type (see Section JSP.3.3.9, “Declaring Default Content Type”). See Chapter JSP.4, “Internationalization Issues” for complete details on character encodings.

翻译:
contentType
定义了MIME类型和响应字符编码的JSP页,它也用来决定JSP页的解码字符集。
它的值要么是“TYPE”,要么是“TYPE;charset=CHARSET”在;后可带一个可选的空白,“TYPE”是一个可选的MIME类型,可以到IANA看到注册的可用的值http://www.iana.org/assignments/media-types/index.html。“CHARSET”,如果出现了,必须是字符编码中IANA的名字。
对于JSP页面的标准语法,默认的“TYPE”是“text/html”,对于JSP文档中的XML语法,默认的是“text/xml”。如果“CHARSET”没有指定,则响应字符解编码取决于4.2节的描述“响应字符编码”
相应的JSP配置元素即默认的content-type(看3.3.9节 “声明默认的Content Type”)。看第4章 “国际化问题” 有字符编码的完整细节。

4.2节的描述“响应字符编码”摘取部分
The initial response character encoding is set to the CHARSET value of the contentType attribute of the page directive. If the page doesn’t provide this attribute or the attribute doesn’t have a CHARSET value, the initial response character encoding is determined as follows:
? For documents in XML syntax, it is UTF-8.
? For JSP pages in standard syntax, it is the character encoding specified by the BOM, by the pageEncoding attribute of the page directive, or by a JSP configuration element page-encoding whose URL pattern matches the page. Only the character encoding specified for the requested page is used; the encodings of files included via the include directive are not taken into consideration. If there’s no such specification, no initial response character encoding is passed
to ServletResponse.setContentType() - the ServletResponse object’s default, ISO-8859-1, is used.

翻译:
初始的字符编码是通过页编译指令中的contentType属性中的CHARSET值决定的,如果JSP页没有提供这个属性,或者这个属性没有设置CHARSET值,那么初始响应字符编码取决于以下规则:
对于文档中的XML语法,按UTF-8格式编码。
对于JSP语法,它的字符编码取决于BOM,或者页编译指令中的pageEncoding属性,或通过一个JSP配置元素页面编码的URL模式匹配的页面。唯一指定的字符编码所请求的页面使用;通过include指令编码的文件包括不考虑。如果没有这些指定,不通过ServletResponse.setContentType()初始化字符编码ServletResponse对象的默认使用ISO-8859-1。

分析一下,charset把首字母改成大写的做法显然不符合规范,但是这种做法服务器能解析说明服务器具有容错性。tomcat旧版本忽略“Charset=GB2312”参数,用BOM解析的是GB2312编码,在tomcat1.7中,服务器直接忽略“Charset=GB2312”,采用ISO-8859-1编码。

根据测试,如果按第一方法,旧版本部分显示正常,新的tomcat会出现乱码,所以说完全依赖于tomcat的容错性的方法根本不靠谱!!
顺便说一下:第二种方法的byte转String方法已过时,在后续版本中使用会有风险
建议使用
str=new String(b,UTF-8);

《JSP实用教程(第2版)/耿祥义》错误之处理汉字乱码相关推荐

  1. 《JSP实用教程(第2版)/耿祥义》错误之“发呆”时间

    关于会话失效的问题,该书用了一个形象的"发呆"时间,但这个词虽然形象,但是存在理解错误.根据几段例子代码来看,书中描述的"发呆"时间是用户无动作失效时间.但是& ...

  2. java基础教程第三版耿祥义,后台开发JAVA岗

    Java虚拟机内存模型 Java虚拟机内存模型中定义的访问操作与物理计算机处理的基本一致! Java中通过多线程机制使得多个任务同时执行处理,所有的线程共享JVM内存区域main memory,而每个 ...

  3. java基础教程第三版耿祥义电子档,统统都会!

    容器化时代来了 虚拟化技术已经走过了三个时代,没有容器化技术的演进就不会有 Docker 技术的诞生. (1)物理机时代:多个应用程序可能会跑在一台机器上. (2)虚拟机时代:一台物理机器安装多个虚拟 ...

  4. java面向对象程序设计第三版耿祥义pdf_java基础知识干货——封装

    很多java初学者,在学到Java面向对象方面的知识点的时候,会觉得这块的知识点真的蛮绕的,一个知识点一个知识点的往外冒,对于初学者来说区分构造器和方法就花费了一整天的时间.现在小编带大家重新过一遍知 ...

  5. java2 实用教程第五版 第四章课本案例及课后题

    第五天 java2 实用教程第五版 耿祥义 张跃平编著 第四章代码 代码1:课本P80 package java课本项目;import java.util.*;public class Example ...

  6. 《Java 2实用教程》(第5版)(清华大学出版社)作者:张跃平、耿祥义习题答案详解

    <Java 2实用教程>(第5版)(清华大学出版社)作者:张跃平.耿祥义习题答案详解 **此答案与详解是本人做作业时所写部分答案,如有错误之处请指出 ** 习题2 1.问答题 (3) 逻辑 ...

  7. Java2实用教程2(第五版)耿祥义课后习题参考答案

    Java2(第5版)最新答案 耿祥义 第1章 一.问答题 1.James Gosling 2.需3个步骤: 用文本编辑器编写源文件. 使用javac编译源文件,得到字节码文件. 使用解释器运行程序. ...

  8. 於岳 linux实用教程(第2版),Linux实用教程 第2版 教学课件 ppt 作者 於岳 编著 06...

    <Linux实用教程 第2版 教学课件 ppt 作者 於岳 编著 06>由会员分享,可在线阅读,更多相关<Linux实用教程 第2版 教学课件 ppt 作者 於岳 编著 06(79页 ...

  9. JSP实用教程-第三章Tag文件与Tag标记

    目录 3.1 Tag文件 3.1.1Tag文件的结构 3.1.2Tag文件的保存 3.2 Tag标记 3.2.1 Tag文件和Tag标记 3.2.2 Tag标记的使用 3.2.3 Tag标记的运行原理 ...

  10. php实用教程第3版郑阿奇课后答案_PHP实用教程(第3版)

    基本信息 书名:PHP实用教程(第3版) 定价:62.00元 作者:郑阿奇 出版社:电子工业出版社 出版日期:2019-01-01 9787#121348822 字数: 页码: 版次: 装帧:平装-胶 ...

最新文章

  1. 英特尔收购Movidius背后:为什么我们需要一款专门的CV处理芯片?
  2. 如何查看已安装的CentOS版本信息
  3. Windows配置Oracle Instant Client
  4. 高德地图android4,Android高德之旅(4)我的位置
  5. 让VC程序在Win7下获得管理员权限
  6. python观察日志(part15)--命名元祖namedtuple
  7. php 发邮件 500错误,使用PHP发送邮件出现这个错误:The following From address failed:xxxx@163.com...
  8. linux系统访问文件夹ls,Linux系统目录结构,文件类型以及ls、alias命令
  9. jsp java el表达式_jsp相关笔记,el表达式、jsp标签库(jstl)
  10. 读书笔记《集体智慧编程》Chapter 2 : Make Recommendations
  11. dj鲜生-29-登陆后欢迎信息的显示
  12. VB键码常数(速查)
  13. 【毕业寄语】我们不缺少鼓励但却缺少了批评
  14. iOS App打包上架超详细流程1
  15. 论文笔记_S2D.24_2014-ECCV_LSD-SLAM: 基于直接法的大范围单目即时定位和地图构建方法
  16. 【POJ1050+POJ2018+HDOJ6638+牛客1006D】最大子段和问题
  17. jQuery选择器 第六章
  18. python复合赋值语句语法_复合结构的赋值语句理解
  19. 开咖啡店如何盈利?用50家咖啡店揭晓一套盈利模式
  20. 【其他】计蒜客 ICPC Pacific Northwest Regional Contest 2017 Gym-101652X Star Arrangements

热门文章

  1. 小菜找实习——阿里3月27日场笔试第一题
  2. securecrt是什么工具_更效率、更优雅 | 阿里巴巴开发者工具不完全盘点
  3. Oracle11g exp 1445,oracle11g 导出表报EXP-00011:table不存在。
  4. mysql数据词典生成markdown_老板让我把数据库字典导出到Markdown格式的文件
  5. java 多线程任务队列_精简的java 线程池与任务队列
  6. SpringBoot系列(1):Spring和SpringBoot常用注解总结
  7. gulp安装报错Local version: Unknown
  8. css3实现水平垂直居中
  9. c# 类的序列化,以及嵌套问题
  10. 关于指针的一些基本常识