【问题标题】:How to identify file format of a file with out BOM (UTF8 No BOM or ANSI)?如何识别没有 BOM 的文件的文件格式(UTF8 No BOM 或 ANSI)?
【发布时间】:2020-09-01 04:50:41
【问题描述】:

我需要从一组文件中识别没有 BOM/ANSI 格式的 UTF8 文件。如何识别这些文件格式?当前使用的策略是检查文件格式是否属于任何已知格式(有 BOM),如果不声明为 UTF8/ANSI。有没有直接找到这些格式的方法?

【问题讨论】:

标签: utf-8 ansi byte-order-mark


【解决方案1】:

通常的方法有效:

  • 检查 BOM,并根据 BOM 给出的格式读取文件。如果您有错误(或没有 BOM),请转到下一点

  • 假设它是 UTF8,并相应地读取文件。如果您有错误,请转到下一点。很少有误报(非UTF8文件也是正确的UTF8)

  • 假设文件是​​ Latin1 或 CP1252(ANSI,它是 Latin1 的超集)

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

请记住,BOM 字符串可能在真正的 ANSI 文件中,作为真正的字符,不幸的是有些文件使用不同的编码(例如,各种源代码,它们可能有版权,某些名称中的某些名称)编码,但在其他编码中使用 cmets。

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

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 2015-12-12
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2013-07-15
    相关资源
    最近更新 更多