如何识别带BOM的文件格式(UTF8无BOM或ANSI)?

问题描述 投票:0回答:1

我需要从一组文件中识别出UTF8无BOM ANSi格式的文件。如何识别这些文件的格式?目前使用的策略是检查文件格式是否属于任何已知的格式(有BOM),如果不属于则声明为UTF8ANSI。有什么直接的方法可以找到这些格式吗?

utf-8 ansi byte-order-mark
1个回答
0
投票

通常的方法是可行的。

  • 检查BOM,然后根据BOM给出的格式读取文件。如果你有错误(或不是BOM),进入下一点

  • 假设是UTF8,并据此读取文件。如果你有错误,请进入下一点。很少出现假阳性(非UTF8文件也是正确的UTF8)。

  • 假设该文件是Latin1或CP1252(美国国家标准协会,它是拉丁文的超集1)

这是最简单和最安全的方法。如果使用其他方法(检测),你仍然应该额外实现这种方法,因为你可能无法读取检测到的编码的文件。

请记住,BOM字符串可能是真实的。美国国家标准协会 文件,作为真正的字符,但不幸的是,有些文件使用了不同的编码(例如,各种源代码,它们可能在版权上有一些名称,在一些编码中,但注释在另一个编码中。

如果你想实现一个更好的算法,在第1点之后,请检查代码 00. 如果有一些(或许多),则用UTF-32回退(如果有3个连续的 00),或UTF16LE或BE,这取决于大多数的 00 处于偶数(LE)或奇数位置。忽略替代的非法组合。

© www.soinside.com 2019 - 2024. All rights reserved.