检测UTF-16文件内容

Fra*_*ger 6 encoding file utf-8 utf-16

是否可以知道文件是否具有Unicode(每个字符16个字节)或8位ASCII内容?

Bri*_*new 8

如果文件存在,您可以读取字节顺序标记.


Gre*_*ung 5

UTF-16 字符都至少为 16 位,其中一些是带有正确前缀(0xE000 到 0xFFFF)的 32 位。因此,简单地扫描每个字符以查看是否少于 128 个字符是行不通的。例如,两个字节 0x20 0x20 将在 ASCII 和 UTF-8 中编码为两个空格,但在 UTF-16 中编码为单个字符 0x2020(匕首)。如果已知文本是英语,偶尔包含非 ASCII 字符,则大多数其他字节将为零。但是,如果没有一些关于文本和/或其编码的先验知识,就没有可靠的方法区分通用 ASCII 字符串和通用 UTF-16 字符串。


Dav*_*son 4

与 Brian Agnew 所说的关于读取字节顺序标记的内容同上,字节顺序标记是可能出现在文件开头的特殊两个字节。

您还可以通过扫描文件中的每个字节并查看它们是否都小于128来判断它是否是ASCII。如果它们都小于128,那么它只是一个ASCII文件。如果其中一些超过 128,则说明其中存在其他编码。