是否有可用于检查文件是UTF 8还是UTF 16的库?我发现这个http://utfcpp.sourceforge.net/但它是用C ++编写的,由于各种原因,我不允许在我正在工作的软件中使用C ++。感谢任何输入
答案 0 :(得分:1)
你不需要图书馆;你应该能够从文件的前几个字节做出猜测。
如果文件开头有BOM(代码点U + feff),那么您可以使用它来嗅探编码,如下所示。
00 00 FE FF
- > UTF-32,big-endian FF FE 00 00
- > UTF-32,little-endian FE FF
- > UTF-16,big-endian FF FE
- > UTF-16,little-endian EF BB BF
- &gt; UTF-8 如果你知道,或者可以合理地假设文件以ASCII开头,那么你可以通过查看前几个字节来区分UTF-8和UTF-16。如果文件以<?xml...
开头(例如!),那么:
00 00 00 3C
- &gt; UTF-32,big endian 3C 00 00 00
- &gt; UTF-32,小端00 3C 00 3F
- &gt; UTF-16,big endian 3C 00 3F 00
- &gt; UTF-16,小端3C 3F 78 6D
- &gt; UTF-8 如果您不知道开头的文本,但确实知道它是ASCII,那么空字节的模式将是相同的。
如果文件无法以ASCII方式可靠启动,则会开始复杂化。但...
但是,就通用性和可靠性而言,最好的方法可能是开始使用UTF解析文件 - 无论解码器是什么,看看哪些有效。事实上,既然这肯定是你要做的事情,你也可以这样做,并且跳过嗅到文件的混乱业务。(这肯定是重复的,但我找不到与它完全匹配的问题)
已编辑,请注意文件不一定以BOM表开头,但在某些情况下仍然可以嗅探。