楼主闭关数月,所得如何?
不用头,如何区别ansi和utf-8编码文件啊?
我被你喷了,微软方案被你鄙视了 ...
PowerShell 发表于 2014-3-22 14:22 
哇,我好害怕啊,居然把某邪*版主喷了- use Encode;
- use Encode::Detect::CJK qw(detect);
-
- recogn("C280GBK_2.txt");
- recogn("C280UTF-8.txt");
-
- sub recogn {
- $file=shift;
- open READ,"<:raw",$file or die "Can not open file: $! ";
- $line=<READ>;
- print "Filename:", $file, " Code:",detect($line),"\n";
- close READ;
- }
复制代码 显示结果:
Filename:C280GBK_2.txt Code:cp936
Filename:C280UTF-8.txt Code:utf8
这结果和用WIN记事本识别的结果是一致的。
我所引用的帖子里,都说了一个观点,那就是UTF-8不需要加BOM,仅仅是说UTF-8。
问题在于GBK编码文本不加BOM,而UTF-8编码文本却加BOM。
(业界先有UTF-8,其他平台已经适应了不带BOM下进行区分。微软却独自加了BOM,而且还是三个字节,
导致了其他平台上读取的时候出错。这就是引用的帖子里批判的地方。)
两种编码之间存在交集,更大的问题在于,UTF-8的BOM ef bb bf 前两个字节可以识别为GBK "锘"
bf 加上 61 可以识别为GBK “縜”
一个带BOM的UTF-8编码文本保存了一行文字:abcdfef中文论坛
ef bb bf 61 62 63 64 66 65 66 e4 b8 ad e6 96 87 e8 ae ba e5 9d 9b
如果算法中使用GBK优先做识别,那这段字就可以按GBK编码为:
锘縜bcdfef涓枃璁哄潧 |