免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3297 | 回复: 4
打印 上一主题 下一主题

关于perl对汉字的编码处理问题,请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-10 10:38 |只看该作者 |倒序浏览
我在用linux shell通过cgi-bin方式实现网页时,碰到一个问题。就是在使用post方法提交数据后,汉字会变成'%CE%D2%C3%C7'这样的格式的数据,无法解析。
参考了论坛文章http://bbs.chinaunix.net/viewthread.php?tid=965788,很受启发,
print encode('cp936', decode('utf16-be', pack('n*', map {hex($_)} '%u53CD%u9988%u7684'=~ m/u([\da-f]{4})/ig)));
,该例子中'%u53CD%u9988%u7684'的编码是不是utf16-be,然后编码成cp936显示汉字,对吗??那请问我所得到的这种类型'%CE%D2%C3%C7'的编码
是什么类型的,utf8??我要是想正常显示的话需要怎么做呢?我这个编码的汉字对应是“我们"这两个字。thx in advance!

论坛徽章:
0
2 [报告]
发表于 2007-08-10 11:27 |只看该作者
网页传过来的%XX%XX%XX%XX的编码取决于网页本身的编码
一般在html的meta头中声明,如果没有的话,使用当前浏览器的默认编码。

你的这个例子%CE%D2%C3%C7是gb2312的编码,是因为你的网页是GB2312的。
转换很简单

  1. print pack('C*', map {hex($_)} '%CE%D2%C3%C7'=~ m/%([\da-f]{2})/ig);
复制代码

这样就得到了一个编码为gb2312的字符串,然后就可以decode & encode了。

论坛徽章:
0
3 [报告]
发表于 2007-08-10 11:40 |只看该作者
哇喔,谢谢。我直接print这个就已经打印出汉字了,好像不需要做decode了,jigloo,thx a lot。不过这个怎么不用指明编码方式呢

[ 本帖最后由 marchyc 于 2007-8-10 11:42 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-08-10 11:46 |只看该作者
因为你的终端Terminal就是gb2312的编码。所以可以直接print
而前一个贴的中没有utf16-le的终端(大多是gbk或utf8的),所以要decode

论坛徽章:
0
5 [报告]
发表于 2007-08-10 11:58 |只看该作者
,再次感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP