中文乱码问题原理及解决方案
1.中文乱码原理
contentType -- 指定的是JSP页最终Browser(客戶端)所見到的网页內容的编码。
就是 Mozilla的 Character encoding, 或者是 IE6的 encoding. 例如 JSPtw Forum 用的contentType就是 Big5.
pageEncoding -- 指定JSP编写时所用的编码
如果你的是 WIN98, 或 ME 的NOTEPAD记事本JSP, 就一定是常用的是Big5 或 gb2312, 如果是用 WIN2k winXP的NOTEPAD時, SAVE时就可以选择不同的编码, 包括 ANSI(BIG5/GB2312)或 UTF-8 或 UNIONCODE(估是 UCS 16).
因为JSP要经过两次的"编码", 第一阶段会用 pageEncoding, 第二阶段会用 utf-8 至utf-8, 第三阶段就是由TOMCAT出來的网页, 用的是contentType.
阶段一是 JSPC的 JSP至JAVA(.java)原码的"翻译", 它会根据pageEncoding 的设定读取JSP. 结果是 由指定的 pageEncoding(utf-8,Big5,gb2312)的JSP 翻译成统一的utf-8 JAVA原码(.java). 如果pageEncoding设定错了, 或沒设定(预设ISO8859-1), 出来的 在这个阶段就已是中文乱码.
阶段二是由 JAVAC的JAVA原码至JAVA BYTECODE的编译. 不论JSP的编写时是用(utf-8,Big5,gb2312),经过阶段一的结果全都是utf-8的ENCODING的JAVA原码.
JAVAC用 utf-8的ENCODING读取AVA原码, 编译成字串是 utf-8 ENCODING的二进制码(.class). 這这是 JAVA VIRTUAL MACNHINE 对常数字串在 二进制码(JAVA BYTECODE)內表单的规范.
阶段三是TOMCAT(或其的application container)载入和执行 階段二得来的JAVA二进制码, 输出的结果( 也就是BROWSER(客戶端)) 見到的. 这时一早隐藏在階段一和二的参数contentType, 就发挥了功效.
由上可知,
1.如果在jsp页面里有中文,则在显示时不出现乱码,就要设置contentType为gbk,big5,gb2312或utf-8。
2.在日文系统下,jsp页面里有中文,则不仅要设置contentType,还得设置pageEncoding为gbk,big5,gb2312,否则可能出现乱码。
2.中文请求乱码原理
默认情况下,浏览器使用utf-8发送请求,服务器(tomcat/webshere/weblogical等)接收请求后默认使用的是iso8859-1。这时如果在java程序里处理中文就可能出现乱码。
解决方案:request.setCharacterEncoding("gb2312");转换字符集后处理。
3.struts中的中文问题
Struts中,浏览器发送请求后, 在action里取值时,无论怎么转码都是乱码,不管用form.get,还是request.get方法。
这是由于,form中的字段已经由struts将请求中的数据组装到form里了,此时已经为乱码,使用的字符集为服务器默认的字符集,所以在action里取值时,无论怎么转码都是乱码,不管用form.get,还是request.get方法
解决方案:做一个过滤器,在请求到来时,让过滤器过滤请求编码字符集。
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain chain) throws IOException, ServletException
{
srequest.setCharacterEncoding(“gb2312”);
chain.doFilter(srequest,sresponse);
}
文章出处:http://www.diybl.com/course/3_program/java/javajs/20071211/91550.html
分享到:
相关推荐
### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...
然而,每个具体问题可能需要针对性的解决方案,因此在实际工作中,了解并熟练掌握字符编码原理,结合具体情况调整代码,才能真正做到“彻底解决中文乱码问题”。 在提供的压缩包文件“中文乱码的问题决绝.doc”中,...
本文将深入分析Java中文乱码问题的根本原因,介绍各种编码格式的区别和应用场景,并提供解决乱码问题的方法和经验。 在Java中,常见的编码格式有: * ASCII码:总共有128个,用一个字节的低7位表示,0~31是控制...
总之,解决Java中的URL中文乱码问题需要理解URL编码的原理,并在客户端和服务器端采取相应的措施,确保编码和解码的一致性。无论是通过JavaScript编码、Java服务器端解码,还是调整服务器配置,关键在于确保字符集的...
在处理中文乱码问题时,Gson提供了一种优雅的解决方案。例如,以下代码展示了如何使用Gson将包含中文的Java对象转换为JSON字符串,以及如何从JSON字符串反序列化回对象: ```java import com.google.gson.Gson; ...
本文将深入探讨Java Web的编码机制,JSP运行原理,以及如何解决常见的乱码问题。 首先,我们需要了解Java中的字符编码规则。Java默认采用ISO8859-1编码,这是针对西欧语言的标准编码,无法正确处理中文字符。为了...
然而,值得注意的是,尽管拦截器是一个有效的解决方案,但在某些情况下,如静态资源的处理,可能需要通过其他方式(如配置服务器或修改资源文件的编码)来解决乱码问题。此外,对于前后端分离的应用,前端也需要确保...
在二维码(QR Code)编码和解码过程中,中文字符可能会出现乱码问题,这通常是由于编码格式不正确或处理方式不当...通过下载和学习开源示例`QRCodes`,你可以更深入地了解这个问题的解决方案,并应用到自己的项目中。
以下是一些关于JavaWeb中文乱码问题及其解决方案的关键知识点: 1. **字符编码基础**:理解字符编码是解决问题的第一步。常见的字符集有GBK、GB2312(简体中文)、Big5(繁体中文)以及Unicode家族的UTF-8、UTF-16...
以下是对这个问题的详细解析和解决方案: 1. **字符集概念**: - **ASCII**:7位字符集,包含128个字符,主要为英文字符。 - **ISO-8859-1**:扩展ASCII,增加了一些西欧语言的字符。 - **双字节字符集**:如GB...
java 中文乱码问题的解决方案是多种多样的,但只有当我们了解了 java 系统的中文问题原理,才能对中文问题采取根本的解决之道。 java 系统的中文问题解决方案包括使用 String 的字节码转换、对 J2EE 容器进行编码...
本教程将详细解释如何解决jspdf中文乱码的问题,帮助开发者顺利导出含有中文内容的PDF。 首先,我们需要理解jspdf的基本工作原理。jspdf是一个JavaScript库,它允许在浏览器端生成PDF文件。默认情况下,jspdf使用的...
【JSP 中文乱码的原因及解决方法】 在开发基于Java的JSP应用程序时,遇到中文乱码问题是很常见的困扰。这是因为Java的核心和class文件基于Unicode编码,这为跨平台提供了便利,但也引入了处理中文字符时可能出现的...
**解决乱码问题的方法:** 1. **指定编码**:在读写文件时,使用`InputStreamReader`和`OutputStreamWriter`,并明确指定编码,如`"GBK"`或`"UTF-8"`。 ```java FileInputStream fis = new FileInputStream(file);...
汉字乱码问题的常见现象包括中文字符显示为问号或其他无法识别的符号。解决这个问题的关键在于确保客户端和服务器端的字符集一致。如果出现乱码,可以采取以下步骤: 1. 检查并调整客户端NLS_LANG设置,使其与...
解决中文乱码问题需要从多个层面进行检查和处理,过滤器是其中一种有效的方法。通过在Web应用的入口处统一设置编码,可以避免因编码不一致导致的乱码问题。然而,要完全消除乱码,还需要对整个系统的编码环境进行...
5. **插件或补丁**:有时社区会提供针对特定问题的补丁或插件,可以查找并安装这些解决方案。例如,可能存在针对SI3.5中文乱码的修复补丁,这些通常会在论坛或GitHub等开源平台分享。 6. **升级到更高版本**:如果...
以下是一些关键的知识点和解决方法: 1. **JSP页面乱码** 当JSP页面中的中文字符无法正确显示时,通常是因为没有指定页面的字符集编码。JSP支持多种字符集,如GBK、UTF-8等。为解决此问题,可以在JSP页面顶部添加`...