在使用Ajax过程中,有个头疼的问题,responseText传回的值不可更改的为utf-8,这导致页面编码很头疼,统一用utf-8是没有问题,但为了压缩页面大小,还是有很多开发者采用 charset=ISO-8859-1(英文)和charset=gb2312(简体中文),那么该如何处理呢?
我们目前的开发是用Asp,经实践可以用js的escape()和unescape()方法来解决上面的问题。具体来说,在服务器端将response.write的内容用escape()方法预处理,在客户端用unescape()来处理传回的responseText,这样就不会乱码了。
还有个复杂点的方法,用responseXML来代替,因为XML文档可以自定义编码方式。
注:escape(charString)是对String对象进行Unicode编码转换,以便其能在所有的计算机上可读。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 "%20" 。字符值大于 255 的以 %uxxxx 格式存储。unescape则是逆向操作。
在http://www.taylanpince.com/blog/看到Taylan Pince碰到的问题,他在开发的ISO-8859-9编码的Turkish页面不能显示responseText传过来的土耳其语,他用header("Content-type: text/html; charset=ISO-8859-9")的声明,似乎解决了大部分浏览器的问题,但ie仍有问题,不得以他采用了utf-8,利用php的Multibyte String能力对字符串进行编码转换。
我们目前的开发是用Asp,经实践可以用js的escape()和unescape()方法来解决上面的问题。具体来说,在服务器端将response.write的内容用escape()方法预处理,在客户端用unescape()来处理传回的responseText,这样就不会乱码了。
还有个复杂点的方法,用responseXML来代替,因为XML文档可以自定义编码方式。
注:escape(charString)是对String对象进行Unicode编码转换,以便其能在所有的计算机上可读。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 "%20" 。字符值大于 255 的以 %uxxxx 格式存储。unescape则是逆向操作。
在http://www.taylanpince.com/blog/看到Taylan Pince碰到的问题,他在开发的ISO-8859-9编码的Turkish页面不能显示responseText传过来的土耳其语,他用header("Content-type: text/html; charset=ISO-8859-9")的声明,似乎解决了大部分浏览器的问题,但ie仍有问题,不得以他采用了utf-8,利用php的Multibyte String能力对字符串进行编码转换。
function encodeAJAX($str)
{
return mb_convert_encoding($str, "UTF-8", "ISO-8859-9");
}
echo encodeAJAX("?nbsp;ü ^ _ 0 1 )
?/P>
我在想,他利用我说的escape方法是不是能够得到解决呢?
关于编码,实在是个复杂的问题,得找些资料补补起。
这里看到一篇非常不错的文章,对于asp开发者来说,很清晰的说明了页面编码设定的问题,能够帮助解决一些奇怪的乱码问题。