中文乱码问题汇总

Java Web AUmaWSsSoi 8个月前 (04-23) 109次浏览 0个评论

Javaweb项目开发中中文显示乱码问题,该如何解决?

常识:

1.UTF-8国际编码,GBK中文编码。GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立;

2、web tomcat:默认是ISO8859-1,不支持中文的

3.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码;

4.getBytes() 是通过平台默认字符集进行编码;

 

解决方案

1. Jsp

<% @page pageEncoding=”UTF-8″ contentType=”text/html; charset=UTF-8″ %>

 

2. JSP页面头部

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″/>

3. 浏览器调用servlet,页面显示乱码

servlet使用response对象输出前,先执行

response.setContentType(“text/html;charset=utf-8”);response.setCharacterEncoding(“utf-8”);

本质:

response.setContentType(“text/html;charset=UTF-8”); 目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;

response.setCharacterEncoding(“UTF-8”);目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器;

==>例1

以下面的代码为例:

protected void doGet (HttpServletRequest request, HttpservletResponse response) throws ServletException, IOException {

Outputstream out = response . getOutputStreaml》;

string data = “博客”;

out .write ldata . getBytes (“uTF-8”);

 

乱码流程图:

中文乱码问题汇总

解决方案:中文乱码问题汇总

==>例2

Protected void doGet (HttpservletRequest request, HttpServletResponse response) throws ServletException, IOException {

Printwriter out = response.getWriter();

string data = “博客”;

out .println ldata);

}

浏览器输出的结果为: ??

原因:”博客”首先被封装在response对象中,因为IE和WEB服务器之间不能传输文本,然后就通过ISO-8859-1进行编码,但是ISO-8859-1中没有“博客”的编码,因此输出“??”表示没有编码;

乱码流程图: 中文乱码问题汇总

而解决方案是:response.setCharacterEncoding(“GB2312”); 设置response使用的码表中文乱码问题汇总

4. jsp或servlet中表单参数提交给对应的jsp或servlet,接收的jsp或servlet中接收到的参数中文显示乱码

在接收post提交的参数前,使用

request.setCharacterEncoding(“utf-8”);

设定接收参数的内容格式为utf-8编码。

 

5. 数据库连接

设置characterencoding为UTF-8 如:

String url=”jdbc:mysql://localhost:3306/dbname?useUnicode=true&amp;characterEncoding=UTF8″;

6. URL方式传递参数(Tomcat)乱码

为了保证get/post数据都采用相同的UTF8编码,在tomecat中server.xml设置:

<Connector port=”8080″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″  URIEncoding=”UTF-8″ />

 

7. 数据库(mysql)

输入查询语句SHOW VARIABLES LIKE ‘character_set_%’;查看所有的编码是否是UTF-8。如不是,使用Server Instance Config 把默认的字符集设置为utf-8或者修改/MySQL/MySQL Server 5.0/my.ini中的default-character-set=gbk

character-set-server=gbk;

重新启动mysql的服务

8. properties文件乱

问题描述:在使用一些类库或者框架时,为了实现页面内容国际化,需要编写对应的properties文件。而properties文件中的中文内容在显示的时候也会出现乱码。

解决方法:这个乱码问题可以通过jdk中的native2ascii工具解决。使用如下命令:

native2ascii  encoding  utf-8

display.properties    display_zh_CN.properties

出现乱码问题的原因是因为java编译器只能处理Latin-1或unicode编码的字符文件。


java问与答 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:http://javaexception.com/archives/56
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址