现在的位置: 首页 > 综合 > 正文

汉字处理

2013年09月27日 ⁄ 综合 ⁄ 共 565字 ⁄ 字号 评论关闭

查出文件中含有乱码的行号

September 23rd, 2007 by admin

在各种系统中导入导出数据时,有时候会产生乱码,比如“ā”之类,或某些不可见字符。这些含有乱码的文件,在导入某些系统时会报错。所以导入前需要找到位置进行处理。

经过考虑,用Perl写了一个程序,对文件每个字符进行过滤,发现不符合要求的字符,就输出行号。这样就能定位行数了。本任务的目标是处理GB2312的文件,正常字符指的是汉字和ASCII可见字符,其余字符都可认为是乱码。

困难:如何将文件中的字符一个一个的读出,对于汉字,算做一个字符?
用“my @chars = split //,$line;”可以把每行的所有字符拆到一个数组里。
用“use encoding ‘gb2312′;”即可解决,指定了来源文件的字符集是gb2312,就不会把一个汉字拆成两个字符。

困难:如何判断一个字符是不是乱码?
用hex(unpack(”H*”,$char))来求出字符的编码值,然后去查gb2312字符表,把正常字符的编码范围确定出来,进行比较即可。如本 任务中,可以用这个作为条件来判断乱码: ($charvalue < 32 || ($charvalue > 126 && $charvalue <= 45217) || $charvalue >= 63486)。之所以喜欢用十进制,是感觉比16进制用起来习惯。

 

抱歉!评论已关闭.