EUC-JP 或 GB18030 文本文件

EUC-JP or GB18030 Text File

我有一个包含以下内容的文本文件: Ã(195) Ü(220) Â(195) ë(235) Ó(211) Ã(195) »(187) §(167) Ã(195) û(251) Ã(195) Ü(220) Â(194) ë(235) Ã(195) û(251) ³(179) Æ(198) Ã(195) û(251) ³(179) Æ(198)。为简单起见,我在文本中添加了从 http://www.fileformat.info/. Going by the Unicode Character set, this file seems to comply with this line A character from JIS-X-0208 (code set 1) is represented by two bytes, both in the range 0xA1 – 0xFE. mentioned in https://en.wikipedia.org/wiki/Extended_Unix_Code#EUC-JP 获得的 Unicode 值,我的渲染引擎似乎显示日文字符。然而,这实际上是一个包含 密码用户名密码名称名称 的中文文本文件,它被 Notepad++ 识别为 GB2312 编码文件。是否有更多限制来确定文件是否为 JIS-X-0208(EUC-JP) 编码,因为它似乎符合 Wiki 所说的?

然而,我的渲染引擎似乎将此文件识别为 EUC-JP 和中文,但由于 EUC-JP 的顺序较高,我们认为它是日文并显示日文字符。

Are there some more restrictions for determining if a file is JIS-X-0208(EUC-JP) encoded

有一点,因为前导字节 0xF5–0xF8 和 0xFD–0xFE 未分配,并且还有一些其他未分配的字符散布在整个块的末尾。

不过,这对你没有帮助,因为字节序列 C3DCC2EBD3C3BBA7C3FBC3DCC2EBC3FBB3C6C3FBB3C6 在 GB(密码用户名密码名称名称)和 EUC-JP(畜鹰喘萨畜億儆)中同样有效。 11=]

这就是字符集嗅探的乐趣。您必须根据输入中存在的可能性对您拥有的字符集进行修剪和重新排序。通常在 Windows 世界中,EUC-JP 很少见(将使用类似 Shift-JIS 的代码页 932),因此类似 GB 的代码页 936 通常会“获胜”。

没有完全可靠的方法来识别未知编码。

分布模式可能可以帮助您确定您正在查看的是 8 位编码还是 16 位编码。双字节编码往往每隔一个字节都有一个稍微受限的分布模式。 这就是你现在所在的位置。

在 16 位编码中,您还可以很容易地确定您正在查看的是大端编码还是小端编码。 Little-endian 将在偶数字节上具有约束模式,而 big-endian 将在奇数字节上具有约束模式。不幸的是,大多数双字节编码似乎都是大端编码,所以这不会有太大帮助。如果您正在查看小端字节序,则可能是 UTF-16LE。

查看您的示例数据,从第一个字节开始,每隔一个字节似乎都等于或接近 0xC3(但似乎缺少一些字节,也许?)

个别字节序列在个别编码中是无效的,但总的来说,这不太可能帮助你得出结论。如果您可以使用此策略删除一个或多个候选 16 位编码,那对您有好处;但它可能不足以解决您的问题。

在这个 space 中,您只剩下统计数据了。如果文本足够长,您可能会找到重复模式,或者使用候选编码的频率 table 来计算每个模式的分数。因为日本的书写系统与中国有共同的遗产,你会发现它们的分布有相似之处,但也有不同之处。从类型上讲,日语与中文有很大不同,这意味着日语每隔几个字符就会有 particles 个字符,而中文则完全没有。所以你会寻找 "no" の, "wa" は, "ka" か, "ga" か, "ni" ニ 等,如果它们存在,则得出结论你是查看日文(或者,相反地,假设您正在查看中文,如果它们不存在;但如果您正在查看姓名列表,例如,它仍然可能是日文)。

在中文(以及与日语相关的)中,您可以查看 http://www.zein.se/patrick/3000char.html 以获取频率信息;但请记住,日文粒子在日文 运行 文本中比任何这些字形都更常见。

例如,的(列表中的第一项)又名 U+7684 将在 UTF-16be 中为 0x76 0x84,在 Big-5 中为 0xAA 0xBA,在 EUC-JP 中为 0xC5 0xAA,在 GB2312 中为 0xB5 0xC4等

根据您的示例数据,您可能在该列表中有项目 139 名称又名 U+540D,它在 UTF-16be 中为 0x54 0x0D,在 Big-5 中为 0xA5 0x57,在 EUC-JP 中为 0xCC 0xBE,以及 0xC3 GB2312 中的 0xFB。 (看到没?中!)