java中文乱码解决方法

10 篇文章 0 订阅

 

1 .以POST 方法提交的表单数据中有中文字符
由于Web 容器默认的编码方式是ISO-8859-1 ,在Servlet/JSP 程序中,通过请求对象的getParameter() 方法得到的字符串是 以ISO-8859-1 转换而来,这是导致乱码产生的原因之一。为了避免容器以ISO-8859-1 的编码方式返回字符串,对于以POST 方法提交的表单 数据,可以在获取请求参数值之前,调用request.setCharacterEncoding"GBK" ),明确指定请求正文使用的字符编码方式是 GBK 。在向浏览器发送中文数据之前,调用response.setContentType"text/html;charset=GBK" ),指定输 出内容的编码方式是GBK
对于JSP 页面,在获取请求参数值之前,写上下面的代码:
<%request.setCharacterEncoding("GB2312");%>
为了指定输出内容的编码格式,设置page 指令contentType 属性,如下:
<%@ page contentType="text/html; charset=GBK" %>
Web 容器转换JSP 页面后的Servlet 类中,会自动添加下面的代码:
response.setContentType("text/html; charset=GBK");
2
.以GET 方法提交的表单数据中有中文字符
当提交表单采用GET 方法时,提交的数据作为查询字符串被附加到URL 的末端,发送到服务器,此时在服务器端调用setCharacterEncoding() 方法也就没有作用了。我们需要在得到请求参数的值后,自己做正确的编码转换。
String name = request.getParameter("name");
name=new String(name.getBytes("ISO-8859-1"),"GBK");
在第一行,调用getParameter() 方法得到的字符串nameUnicode 值是以ISO-8859-1 编码转换而来,调用 name.getBytes"ISO-8859-1" ),将得到原始的GBK 编码值,接着,对new String() 的调用将以GBK 字符集重新构造字符串的Unicode 编码。
为了方便从ISO-8859-1 编码到GBK 的转换,我们可以编写一个工具方法,如下:
public String toGBK(String str)
                 throws java.io.UnsupportedEncodingException
{
    return new String(str.getBytes("ISO-8859-1"),"GBK");
}
3
.在数据库中存储和读取中文数据
对于大多数数据库的JDBC 驱动程序,在Java 程序和数据库之间传递数据都是以ISO-8859-1 为默认编码格式,所以,我们在程序中向数据库存储包 含中文的数据时,JDBC 驱动程序首先把程序内部的Unicode 编码格式的数据转化为ISO-8859-1 编码,然后传递到数据库中,加上数据库本身也 有字符集,这就是为什么我们常常在数据库中读取中文数据时,读到的是乱码。
要解决上述问题,只需要将数据库默认的编码格式改为GBKGB2312

并且

在连接数据库用的URL

后加入(以连接mysql

为例):useUnicode=true;characterEncoding=utf-8

 如:  url="jdbc:mysql:///db1?useUnicode=true&characterEncoding=utf-8"

即可,不同的数据库还提供了另外的方式来处理字符编码转换的问题,读者在实际应用过程中,可针对具体情况再做具体处理,只要理解了编码转换的过程,就能找到问题的所在,进而解决问题。
4
Servlet/JSP 在不同语言系统的平台下运行
有时候,我们在中文系统平台下开发的Web 应用程序移植到英文系统平台下,在ServletJSP 中直接书写的中文字符串在输出时,将显示为乱码。这是 因为在编译Servlet 类或者JSP 文件时,如果没有使用-encoding 参数指定Java 源程序的编码格式,javac 会获取本地操作系统默认采用 的字符集,以该字符集将Java 源程序转换为Unicode 编码保存到内存中,然后将源程序编译为字节码文件(字节码文件采用的是UTF-8 编码),保存 到硬盘上。
在英文平台下,采用的默认编码格式是ISO-8859-1 ,所以在编译转换后,执行输出时,原先在源文件中书写的中文字符串就变成了乱码。
要解决这个问题,在编译Servlet 类的源程序时,可以用-encoding 参数指定编码为GBKGB2312 ,例如:
javac
encoding GBK HelloServlet.java
对于JSP 页面,只要在page 指令中用contentType 属性或pageEncoding 属性指定编码格式为GBKGB2312Web 容器就可以正确转换和编译JSP 文件了。例如:
<%@ page contentType="text/html; charset=GBK" %>

<%@ page pageEncoding="GBK" %>
在实际的Web 应用中,乱码问题产生的原因多种多样,然而只要我们理解了字符编码的转换过程,仔细地分析乱码产生的原因,找到问题的关键,就能对症下药,解决问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值