gpt4 book ai didi

c# - 是否可以检测两种可能的文本文件编码?

转载 作者:行者123 更新时间:2023-11-30 12:36:19 28 4
gpt4 key购买 nike

我读了How can I detect the encoding/codepage of a text file无法检测编码。然而,是否有可能检测编码是否是允许的两种编码之一?

例如,我允许用户为他们的 csv 文件使用 Unicode UTF-8iso-8859-2。是否可以检测是前者还是后者?

最佳答案

For example I allow user to use Unicode UTF-8 and iso-8859-2 for their csv files. Is it possible to detect whether it is former or latter?

不可能 100% 准确,因为例如,字节 C3 B1 是 ISO-8859-2 中“±”的有效表示,因为它们是 UTF-8 中的“ñ”。事实上,因为 ISO-8859-2 将一个字符分配给所有 256 个可能的字节,每个 UTF-8 字符串也是一个有效的 ISO-8859-2 字符串(如果非 ASCII,则表示不同的字符)。

然而,反之则不然。 UTF-8 对哪些序列有效有严格的规定。超过 99% 的可能的 8 字节序列不是有效的 UTF-8。而您的 CSV 文件可能比这长得多。因此,如果您:

  1. 执行 UTF-8 有效性检查。如果通过,则假设数据是 UTF-8。
  2. 否则,假设它是 ISO-8859-2。

However is it possible to detect whether encoding is one of two allowed?

UTF-32(字节顺序)、UTF-8 和 CESU-8 可以通过验证可靠地检测到。UTF-16 可以通过 BOM 的存在来检测(但不能通过验证来检测,因为使偶数长度字节序列无效的 UTF-16 的唯一方法是具有未配对的代理项)。

如果您至少有一个“可检测”编码,那么您可以检查可检测编码,并使用不可检测编码作为后备。

如果两种编码都“无法检测”,如 ISO-8859-1 和 ISO-8859-2,那么它就更难了。您可以尝试像 chardet 这样的统计方法用途。

关于c# - 是否可以检测两种可能的文本文件编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3584069/

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