好吧,我需要找出我在某个目录中找到的哪些文件是UTF8编码的ANSI编码,以便在我稍后决定的其他内容中更改编码.我的问题是..如何判断文件是UTF8还是ANSI编码?这两种编码实际上都在我的文件中.
suk*_*kru 13
没有可靠的方法(因为文件可能只是随机二进制文件),但Windows记事本软件完成的过程在Micheal S Kaplan的博客中详细说明:
http://www.siao2.com/2007/04/22/2239345.aspx
- 检查前两个字节; 1.如果有UTF-16 LE BOM,则将其作为"Unicode"文件处理(并加载); 2.如果存在UTF-16 BE BOM,则将其作为"Unicode(Big Endian)"文件处理(并加载); 3.如果前两个字节看起来像是UTF-8 BOM的开头,那么检查下一个字节,如果我们有一个UTF-8 BOM,那么将其作为"UTF-8"文件处理(并加载);
- 检查IsTextUnicode以查看该函数是否认为它是无BOM的UTF-16 LE,如果是,则将其作为"Unicode"文件处理(并加载);
- 检查它是否使用1998年的原始RFC 2279定义UTF-8,然后将其作为"UTF-8"文件处理(并加载);
- 使用计算机的默认系统代码页假设ANSI文件.
现在请注意,这里有一些漏洞,比如第2步没有使用无BOM的UTF-16 BE那么好(这里甚至可能有一个bug,我不确定 - 如果是这样的话它就是一个bug在记事本中超出IsTextUnicode中的任何错误).