- 论坛徽章:
- 0
|
唉,我多么想说问题已经解决了,但是用了js_escape出现的结果一模一样的,疯了我。现在唯一的办法就是不对中 ...
blackmuyu 发表于 2010-04-05 10:27 ![]()
今天反复试验,总算有所发现,希望这个能彻底终结你的问题 {:3_189:}
你提到只要中文不放到uri_escape中就不会有问题,之前一直认为uri_escape对中文支持不行造成,后来才发现这其实是一个错误的方向。
我看到你在1楼帖子上有乱码截图,于是我想看看如何才能由原始的汉字得到那些乱码。 用iso 8859的编码去看,也是乱码,乱码的形式相似,但不相同。后来尝试perl的encode的时候,发现按照如下方式可以得到那些乱码:
- my $string = "我 你他的这那3";
- my $utf8_str = encode("utf8", $string);
- print "utf8 string : $utf8_str\n";
复制代码 perl字符本身就是按照utf8编码,如果再对其utf8编码一次,单字节字符不会变化,但象中文等双字节字符,肯定出现乱码了。
由此我想到你的乱码也是由于2次utf8编码产生的。第一次utf8编码是perl本身完成,这里没有任何错误,第二次utf8编码则是出现在ajax的传送过程中。ajax默认都是按照utf8的编码发送请求和返回response的。这个过程会对内容再一次进行utf8编码,于是再最终的接受到的页面中,中文都是2次utf8后的乱码了。
解决的办法是:
对ajax传送的内容做一次utf8的decode,使2次utf8 encode变成 1次。
所以不妨试试:
- print "Content-type: text/html\n\n";
- print decode("utf8",$mainajaxcontent);
- ... ...
复制代码 |
|