免费注册 查看新帖 |

Chinaunix

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

中文双字节编码vs正则表达式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-09 22:10 |只看该作者 |倒序浏览
$tmp="中文";
print $tmp=~ m/形/;
结果等于1
使用encoding
use   encoding   'cp936',   STDIN   =>   'cp936',   STDOUT   =>   'cp936';
结果就正常了.

如果不使用encoding,有没有好的方法解决这个问题呢.

论坛徽章:
0
2 [报告]
发表于 2008-04-09 22:18 |只看该作者
你那个是什么字,看起来怪怪的

论坛徽章:
0
3 [报告]
发表于 2008-04-10 08:16 |只看该作者

回复 #2 cobrawgl 的帖子

"中文"中的"中"字的右编码,和"文"字的左编码,正好组成了"形"字.
在gbk编码中
"中"字的编码是:d6  d0
"文"字的编码是:ce  c4

而d0 ce 是"形" 字的编码

论坛徽章:
0
4 [报告]
发表于 2008-04-10 09:51 |只看该作者

系统的locale是GBK

# locale
LANG=zh_CN.GBK
LC_CTYPE="zh_CN.GBK"
LC_COLLATE="zh_CN.GBK"
LC_TIME="zh_CN.GBK"
LC_NUMERIC="zh_CN.GBK"
LC_MONETARY="zh_CN.GBK"
LC_MESSAGES="zh_CN.GBK"
LC_ALL=

论坛徽章:
0
5 [报告]
发表于 2008-04-10 09:53 |只看该作者
这个case应该比较让人激动,哈哈

论坛徽章:
0
6 [报告]
发表于 2008-04-10 10:14 |只看该作者

找到两篇解决办法

http://bbs.chinaunix.net/viewthread.php?tid=100824
http://bbs.chinaunix.net/viewthread.php?tid=103329

方法1:
先用unpack將string編碼成hex的數字..
然後兩碼兩碼抓出來檢查....
找出GB2312中文字的起始與終止hex編碼為多少...
然後就知抓出來的編碼是不是中文字...
等全部中文字都抓出來了,再pack為中文...

方法2:
英文的可显示字符的ASCII码的范围是32<x<128, 而汉字是双字节编码,汉字编码的第一字节的ASCII是大于127的应用ord函数判断一个字符的ASCII 码如果大于127那它应该是汉字的第一字节这样连取两字节抛弃就行了

有没有更快更好的解决办法呢?

[ 本帖最后由 chenyan1206 于 2008-4-10 10:16 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP