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

简介:

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

&浏览器中看到的 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正確转化为编码A的String,然后输出。

 

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, 数据库中数据的编码定义,统一编码格式或做适当转换。


目录
相关文章
|
6月前
|
Java Spring
中文乱码处理
中文乱码处理
80 0
|
6月前
|
C++
VS Code 中文乱码及编码格式问题全解
VS Code 中文乱码及编码格式问题全解
2494 0
|
6月前
|
编解码 JavaScript 编译器
[字符编码] 实战篇:QT中文乱码的解决办法
[字符编码] 实战篇:QT中文乱码的解决办法
1977 0
Pycharm 中文乱码解决,统一设置 UTF-8,再也不会乱码了
Pycharm 中文乱码解决,统一设置 UTF-8,再也不会乱码了
Pycharm 中文乱码解决,统一设置 UTF-8,再也不会乱码了
|
存储
为什么会有中文乱码?
为什么会有中文乱码?
110 0
中文乱码
中文乱码
138 0
中文乱码
|
应用服务中间件 nginx Docker
中文乱码问题
中文乱码问题
159 0
Notepad++ 出现中文乱码 轻松解决
Notepad++ 出现中文乱码 轻松解决
2287 0
Notepad++ 出现中文乱码 轻松解决
|
编解码 中间件 Java
javaWeb解决中文乱码的一点小总结
不同形式的请求及携带参数问题导致的乱码及解决