我需要从一组文件中识别出UTF8无BOM ANSi格式的文件。如何识别这些文件的格式?目前使用的策略是检查文件格式是否属于任何已知的格式(有BOM),如果不属于则声明为UTF8ANSI。有什么直接的方法可以找到这些格式吗?
通常的方法是可行的。
检查BOM,然后根据BOM给出的格式读取文件。如果你有错误(或不是BOM),进入下一点
假设是UTF8,并据此读取文件。如果你有错误,请进入下一点。很少出现假阳性(非UTF8文件也是正确的UTF8)。
假设该文件是Latin1或CP1252(美国国家标准协会,它是拉丁文的超集1)
这是最简单和最安全的方法。如果使用其他方法(检测),你仍然应该额外实现这种方法,因为你可能无法读取检测到的编码的文件。
请记住,BOM字符串可能是真实的。美国国家标准协会 文件,作为真正的字符,但不幸的是,有些文件使用了不同的编码(例如,各种源代码,它们可能在版权上有一些名称,在一些编码中,但注释在另一个编码中。
如果你想实现一个更好的算法,在第1点之后,请检查代码 00
. 如果有一些(或许多),则用UTF-32回退(如果有3个连续的 00
),或UTF16LE或BE,这取决于大多数的 00
处于偶数(LE)或奇数位置。忽略替代的非法组合。