欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

开发中常见的中文乱码原因

程序员文章站 2022-07-08 22:53:13
...

 

在开发中,我们常常遇到中文乱码的问题,比如:

&浏览器中看到的 Jsp/Servlet 页面中的汉字成了 ’?     

&浏览器中看到的 Servlet 页面中的汉字都成了乱码    

&Jsp/Servlet 页面无法显示 GBK 汉字。

&Jsp/Servlet 不能接收 form 提交的汉字。

&JSP/Servlet 数据库读写无法获得正确的内容。

隐藏在这些问题后面的是各种错误的字符转换和处理。解决类似的字符encoding问题,需要了解 Jsp/Servlet 的运行过程,检查可能出现问题的各个点。下面是一些自己运用中的一些分享:

1.jsp中如果指定了<%@ page contentType="text/html; charset=A"%>,那么在该jsp中所有构造的String(不是引用),如果沒有指定编码,那么这些String的编码是A的;从request得到的String如果沒有指定request的编码的话,他是iso-8859-1的;从别的地方得到的String是使用原來初始的编码的,比如从数据库得到String,如果数据库的编码是B,那么该String的编码是B而不是A的,也不是系统默认的。此时,如果要输出的String的编码不是A,那么,很可能显示乱码的,所以首先要将String正確转化为编码AString,然后输出。

 

2. 如果在jsp中沒有指定<%@ page contentType="text/html; charset=A"%>,那么相当于指定了<%@pagecontentType="text/html; charset=ISO-8859-1" %>

 

3. Servlet中如果执行了语句:response.setContentType("text/html;charset=A");説明将response的字符输出流编码设置为A,所有要输出的String的编码要转化为A,否則会得到乱码。Servlet中从request得到的String的编码和jsp中一样的,但是在servlet java文件中构造的String是使用的系统默认的编码的。在servelt中从外部得到的String是使用原来的编码的,比如从编码为B的数据库得到的数据是编码为B,不是A,也不是系统默认的编码。

 

综上所属,要解决我们常见的中文乱码问题,需要理解数据交互中Jsp, Servlet, 数据库中数据的编码定义,统一编码格式或做适当转换。