这个问题可以在google上搜到很多答案,不过由于本人愚钝凡是以“XMLHttpRequest 乱码”搜到的文章,没有一个能圆满解决我的问题,不过从中受到不少启发,并最终帮我解决了问题.
客户端
使用XMLHttpRequest发送和接收数据
服务器
使用Java写servlet程序处理,并返回数据
问题:遇到汉字时出现乱码
解决:
1. 客户端 ---> 服务器
首先客户端发送数据前要先编码
escape(escape('数据'));
注意一定要两次escape;
服务器收到的数据要解码,注意只需解码一次
下面是从网山搜到的解码函数:
public static String unescape(String src)
{
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if(pos == lastPos) {
if(src.charAt(pos + 1) == 'u') {
ch = (char)Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
}
else{
ch = (char)Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
{
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if(pos == lastPos) {
if(src.charAt(pos + 1) == 'u') {
ch = (char)Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
}
else{
ch = (char)Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}