`

中文乱码问题原理及解决方案

    博客分类:
  • java
阅读更多
中文乱码问题原理及解决方案
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
分享到:
评论

相关推荐

    linux运维学习笔记:MySQL数据库中文乱码原理及解决乱码方案.pdf

    linux运维学习笔记:MySQL数据库中文乱码原理及解决乱码方案

    Java Web开发中的中文乱码问题分析及解决方案.pdf

    在进行java Web开发的过程中,由于采用的编码和解码的方式不统一,...文中首先介绍了java Web的编码机制及JSP运行原理,继而阐述了在开发过程中常见的乱码问题及解决方案,最后提出采用过滤器重写getParameter方法,实现...

    struts2的中文乱码问题解决

    struts2中存在中文乱码的问题解决方 中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。 大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码...

    Java编程汉字乱码原因分析及解决方法研究.pdf

    针对这一异常,本文首先介绍了java和JSP文件编译时对汉字字符处理的基本原理,接着分析了java程序与其他媒介交互时产生乱码现象的根本原因,最后针对产生异常的每种情况给出了具体的解决方法,对...

    做Java项目过程中遇到乱码问题的解决方案

    在做java项目(特别是web项目)的过程中,中文乱码一直是我们开发人员比较头疼的问题,因为涉及到编码,解码,字符集,以及国际化等诸多问题,所以在着手解决的时候也缺乏相关的知识。我花了一些时间自己动手实验了...

    VSCode中文乱码解决方案总结(全)

    初学python,深受中文乱码之害。总结了自己遇到的所有的中文乱码解决方法。写的简略,但是好使。对乱码原因做了解释,其实还是对编码不够懂,如果你懂了原理,就能自己解决了。我的环境是VSCode + Anaconda2

    jsp中文问题解决方案.pdf

    即时一些初级教程也仅仅是使用一些表面的方法予以解决,并未深入JSP出现乱码问题的实质原理!对JSP处理字符集的理解难以深入! 本pdf文档根据网上收集的资料己本人的个人总结汇编而成,希望对你能有所帮助!

    javaweb乱码

    对javaweb中文乱码原理解析和各种情况下的解决方案。

    json:cJSON的API封装,以及cJson源码分析,解决个别中文乱码无法解析的问题

    cJSON的API封装,以及cJson源码分析,解决个别中文乱码无法解析的问题 1,原始码:cJSON.c 2,API封装:cJSON_API.c 3,解决乱码的问题在cJSON.c二进制中实现 程序员一提编码应该应该都不陌生,像gbk,utf-8,...

    解决Python发送Http请求时,中文乱码的问题

    解决方法: 先encode再quote。 原理: msg.encode(‘utf-8’)是解决中文乱码问题。 quote():假如URL的 name 或者 value 值中有『&』、『%』或者『=』等符号,就会有问题。所以URL中的参数字符串也需要把『&=』等...

    ajax提交到servelt获取参数有乱码的解决方法

    解决这个方向(servlet——javascript)的中文乱码问题很简单。只需要在 servlet中,添加一个 编码设置: 代码如下: response.setContentType(“text/html;charset=UTF-8”); 而且JSP页面编码方式可以随意设定,GBK...

    php PDO中文乱码解决办法

    // 方法一: PDO::__construct($dsn, $user,... 两种方法都能解决问题, 原理一样的, 使用哪中看自己喜欢了 您可能感兴趣的文章:在PHP中PDO解决中文乱码问题的一些补充PHP中PDO的事务处理分析PHP的PDO常用类库实例分析P

    CSS字符编码引起乱码的快速解决方法

    乱码引起的CSS失效原理: 由于一个中文是两个字符组成,在编码不一致的情况下会引发字符的“重新”组合,(半个汉字的编码字符与后面的字符组合生成新的“文字”)引发原本的结束符合“变异”,从而导致找不到结束...

    python中文乱码不着急,先看懂字节和字符

    Python2.x使用过程中,中文乱码解决最耳熟能详的方法就是在代码前加上#-*- coding:utf-8 –*- 那么为什么需要这么做呢?什么又是字节和字符?下面我们了解下。 我来讲一下字符问题我的理解吧,虽然我对Python的编码...

    字符编码解决方案

    在编写程序时,经常遇到给某个变量赋值中文或其他国家语言时,程序或者界面就出现了莫名奇妙的乱码,经常会被该问题弄的晕头转向的,本文档从原理描述乱码产生的原因,通俗易懂,及该怎样去解决,去杜绝产生这样的...

    java中文问题.pdf

    java中文编码的原理到解决方案

    《Java Web开发与实战--Eclipse+Tomcat+Servlet+JSP整合应用》.(刘伟,张利国).[PDF].zip

    上传、java mail和分页显示、web编程中文乱码问题及解决方案、应用程序的打包和部署等。书中还深入讲解了客户端验证框架jsvalidation、在线文本编辑器fckeditor和apache commons的一些类库等功能强大的实用开发工具...

    Java Web开发与实战:Eclipse+Tomcat+Servlet+JSP整合应用(含光盘源代码)

    主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    03-MySQL不乱码5种方法及不乱码根源深入详解.avi 04-下节内容及课后作业说明.avi 05-课前思想-17期学生23万入职BAT公司 06-课前思想-及课前考试题说明.avi 07-MySQL字符集介绍及生产常用字符集说明.avi 08-MySQL不同...

    node静态服务器实现静态读取文件或文件夹

    现在我们已经大致了解了node 的...输出中出现中文乱码 附解决方案 ~ res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }) 或 res.writeHead(200, { 'Context-Type': 'text/plain' }) res.write('

Global site tag (gtag.js) - Google Analytics