在网上好多提到ajax技术获得数据乱码问题。
我这里有一个解决方案,
针对原有的编码是gbk或gb2312的页面。
这时如从服务器的一个servlet数据,用以下代码来接收。
var messag=XMLHttpReq.responseText;
alert(messag);
此时,有可能显示为乱码,
针对这个问题解决如下:
在服务器端将需要的数据进行如下编码,即utf-8编码,然后用以下代码来解码
var messag=XMLHttpReq.responseText;
var message=unescape(messag);
aler(message);
这时就不会有乱码了。
java 代码
- package com.test;
- public class EscapeUnescape
- {
- 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();
- }
- 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();
- }
- }