乱码是经常困扰非英语Web程序开发的程序员的问题,可喜的是网上的解决方案也不少,有从客户端想办法的,有从服务端想办法的.本人收集了一些材料,总结出自认为比较容易轻松的方案如下,希望与大家一起探讨.
1.Jsp页面正确显示中文(其实这个不是Ajax的)
页首写入:
<%@ page contentType="text/html; charset=UTF-8"%>
<Title>后写入:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
这样静态中文就可以显示了.
2.Java解析XMLHttpRequest传递过来的中文.
如果把中文直接放在URL中通过XMLHttpRequest传到Servlet中,中文会变成"??",其实这时用下列函数转一下码即可:
String type =
StringUtil.getDecodeParamFromReq("type",request);// 取代了原来的request.getParameter("type");
StringUtil类的完整代码如下:
package com.sitinspring.nnyy.util;

import javax.servlet.http.HttpServletRequest;


public final class StringUtil
{

private StringUtil()
{

}

public static String getDecodeParamFromReq(String paramName,

HttpServletRequest request)
{
String retval = request.getParameter(paramName);

try
{
// 中间用ISO-8859-1过渡
byte[] b = retval.getBytes("8859_1");

// 转换成GB2312字符
retval = new String(b, "GB2312");

} catch (Exception e)
{
e.printStackTrace();
}

return retval;
}
}
此后type将得到正确的中文.
3.Response如何传出存在中文的xml
很简单,在Servlet的doPost函数首部书写一下三句即可
response.setContentType("text/xml;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("UTF-8");
此后在js解析responseXML时也不需要escape函数的帮忙了.
示例页面:
以上