xmlhttprequest对象接收的字符串可以包含汉字吗
1个回答
2017-04-04 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
客户端
使用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;
}
}
else{
if(pos == -1){
tmp.append(src.substring(lastPos));
lastPos = src.length();
}
else{
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
2. 服务器 ---> 客户端
服务器返回的数据要编码,下面是从网上搜到的编码函数,注意,一次编码即可
public static String escape(String src)
{
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i ++)
{
j = src.charAt(i);
if(Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))
tmp.append(j);
else
if(j < 256)
{
tmp.append("%");
if(j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
}
else
{
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
客户端收到收据要解码
xml = XMLHttpRequest.responseText;
xml = unescape(xml);
解码一次即可。
---------------------------------------------
另外一种方法是使用URL编码/解码,但是不如这个方便,对于项目来说需要写更多的代码,所以就用这个了。
使用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;
}
}
else{
if(pos == -1){
tmp.append(src.substring(lastPos));
lastPos = src.length();
}
else{
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
2. 服务器 ---> 客户端
服务器返回的数据要编码,下面是从网上搜到的编码函数,注意,一次编码即可
public static String escape(String src)
{
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i ++)
{
j = src.charAt(i);
if(Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))
tmp.append(j);
else
if(j < 256)
{
tmp.append("%");
if(j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
}
else
{
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
客户端收到收据要解码
xml = XMLHttpRequest.responseText;
xml = unescape(xml);
解码一次即可。
---------------------------------------------
另外一种方法是使用URL编码/解码,但是不如这个方便,对于项目来说需要写更多的代码,所以就用这个了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询