当数据流的源与目的地使用不同的字符编码时,就需要对字符编码进行正确的转换:
1. 处理HTTP请求数据编码
默认情况下,IE浏览器发送请求时采用“ISO-8859-1”字符编码,如果Web应用程序要正确读取用户发送的中文数据,则需要进行编码转换。
一种方法是在处理请求前,先设置HttpServletRequest对象的字符编码:
request.setCharacterEncoding("gb2312");
另一种方法是对用户输入的请求数据进行编码转换:
String clientData = request.getParameter("clientData");
if(clientData != null)
clientData = new String(clientData.getBytes("ISO-8859-1"),"GB2312");
2. 处理数据库数据编码
如果数据库系统的字符编码是“GB2312”,则可以直接读取数据库中的中文数据,无需要转换。如果数据库的字符编码为“ISO-8859-1”,则先对来自数据库的数据进行编码转换,然后才能使用。方法是
new String(field.getBytes("ISO-8859-1"),"GB2312")
这里field为数据库表的某个字段值
3. 处理XML配置文件编码
如果在XML文件中包含中文,可以将XML文件的字符编码设为"GB2312",当Java程序加载和解析XML文件时无需再进行编码转换。即在XML文件中直接输写中文。
4. 处理响应结果的编码
Servlet中:response.setContentType("text/html;charset=gb2312");
JSP中:<%@ page contentType="text/html;charset=gb2312"%>
HTML中:
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=gb2312">
</head>