gpt4 book ai didi

c++ - 如何将文件内容识别为 ASCII 或二进制

转载 作者:IT老高 更新时间:2023-10-28 12:46:22 25 4
gpt4 key购买 nike

如何使用 C++ 识别文件内容是 ASCII 还是二进制?

最佳答案

如果文件只包含十进制字节 9–13、32–126,则它可能是纯 ASCII 文本文件。否则,它不是。但是,它可能仍然是另一种编码的文本。

如果在除了上述字节之外,该文件包含十进制字节 128–255,它可能是一个 8 位或变量的文本文件 -长度 基于 ASCII 的编码,例如 ISO-8859-1、UTF-8 或 ASCII+Big5。如果不是,出于某些目的,您可能可以在这里停下来并认为该文件是二进制文件。但是,它可能仍然是 16 位或 32 位编码的文本。

如果文件不符合上述限制,请检查文件的前 2-4 个字节是否有 byte-order mark :

  • 如果前两个字节是十六进制FE FF,则文件暂时是UTF-16 BE。
  • 如果前两个字节是十六进制FF FE,后面两个字节是not十六进制00 00,则文件为暂定 UTF-16 LE。
  • 如果前四个字节是十六进制00 00 FE FF,则文件暂定为UTF-32 BE。
  • 如果前四个字节是十六进制FF FE 00 00,则文件暂时是UTF-32 LE。

如果通过上述检查,您已经确定了一个暂定编码,那么只检查下面对应的编码,以确保该文件不是恰好匹配字节顺序标记的二进制文件。

如果您尚未确定暂定编码,则该文件可能仍然是其中一种编码的文本文件,因为字节顺序标记不是强制性的,因此请检查以下列表中的所有编码:

  • 如果文件包含十进制值为 9-13、32-126 和 128 或以上的大端双字节字,则该文件可能是 UTF-16 BE。<
  • 如果文件包含十进制值为 9-13、32-126 和 128 或以上的 little-endian 两字节字,则该文件可能是 UTF-16 LE。<
  • 如果文件包含十进制值为 9–13、32–126 和 128 或以上的大端四字节字,则该文件可能是 UTF-32 BE。<
  • 如果文件包含十进制值为 9-13、32-126 和 128 或以上的小端四字节字,则该文件可能是 UTF-32 LE。<

如果在所有这些检查之后,您仍未确定编码,则该文件不是我所知道的任何基于 ASCII 编码的文本文件,因此对于大多数目的,您可能会认为它是二进制文件(它可能仍然是非 ASCII 编码(例如 EBCDIC)的文本文件,但我怀疑这超出了您的关注范围)。

关于c++ - 如何将文件内容识别为 ASCII 或二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/277521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com