免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: blackmuyu
打印 上一主题 下一主题

[悬赏]rmb悬赏解决perl乱码问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-04-02 16:05 |只看该作者
你把:  print "Content-Type:text/html\n\n"

改为:  print "Content-Type:text/htm; charset=utf-8\n\n"

应该能够解决问题吧。

uri_escape应该可以不要,或者说你弄错函数了,是否是escapeHTML? (CGI.pm中的函数)。

论坛徽章:
0
12 [报告]
发表于 2010-04-02 16:47 |只看该作者
use Encode;  
print decode("euc-cn",$txt);
这样试下

论坛徽章:
0
13 [报告]
发表于 2010-04-02 17:45 |只看该作者
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
复制代码
首页添上这句看看

论坛徽章:
0
14 [报告]
发表于 2010-04-03 18:58 |只看该作者
恩,谢谢各位,我都试试看。

论坛徽章:
0
15 [报告]
发表于 2010-04-03 19:00 |只看该作者
回复 11# engrol


    uri_escape是必须用的,因为要传递到jsp中去,反正不是jsp就是服务器只认escape之后的,我试过了,不用uri_escape是不行的。

论坛徽章:
0
16 [报告]
发表于 2010-04-03 19:01 |只看该作者
我的意思是别的地方还是使用uri_escape().

但当你输出页面时,就这行修改成这样不影响别的地方,只是需要 ...
climby 发表于 2010-04-02 11:41



    我就是这样干的,确实是不行,这样相当于不用escape,根本就没法运行正常。

论坛徽章:
0
17 [报告]
发表于 2010-04-03 19:21 |只看该作者
现在我调试过程发现一个很奇怪的现象,比如jsp中中文被escape后一般变成%xx%xx,而perl中一个中文变成%xx%xx%xx%xx%xx%xx;这样perl中的一个中文被escape,再到jsp中unescape后就由一个字符变成了3个字符,自然就不是原来的字了。

论坛徽章:
0
18 [报告]
发表于 2010-04-03 21:08 |只看该作者
你发个远程桌面给我吧,我帮你试试。

因为我自己也采用perl做网站,也通过ajax输出汉字,但没有出现你这样的情况。

论坛徽章:
0
19 [报告]
发表于 2010-04-03 23:29 |只看该作者
本帖最后由 climby 于 2010-04-03 23:35 编辑

回复 17# blackmuyu


    根据你描述的情况,我大概知道真正的原因了。
包含中文的字符,被perl的escape转义后,发给了jsp的页面,但jsp里面的unescape并没有按照escape的’协议‘去decode.所以乱码产生。 平时用的比较多的还是js 的escape, unescape. 但perl 的escape ,并不兼容 js 的escape, 简单说perl 的escape后, 甚至无法用js的unescape正确的decode,尤其是中文,有如下的notes为证,来自http://search.cpan.org/~gaas/URI-1.54/URI/Escape.pm

  1. Note: JavaScript has a function called escape() that produces the sequence "%uXXXX" for chars in the 256 .. 65535 range. This function has really nothing to do with URI escaping but some folks got confused since it "does the right thing" in the 0 .. 255 range. Because of this you sometimes see "URIs" with these kind of escapes. The JavaScript encodeURIComponent() function is similar to uri_escape_utf8().
复制代码
你打印的内容最终由ajax返回,我想最后的decode由js的unescape来完成的,所有解决问题的办法,我想我们可以在perl中使用跟js兼容的escape,试试,不妨试试这个
http://search.cpan.org/~taniguch ... scape/JavaScript.pm

论坛徽章:
0
20 [报告]
发表于 2010-04-05 10:27 |只看该作者
唉,我多么想说问题已经解决了,但是用了js_escape出现的结果一模一样的,疯了我。现在唯一的办法就是不对中文转码,呵呵。算了,不管了,反正要转的地方不多,以后再研究了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP