#web #charset

shift_or_euc

检测日本旧版编码

1 个不稳定版本

0.1.0 2019年4月16日

#1857文本处理


shift_or_euc_c 中使用

MIT/Apache

16KB
161

shift_or_euc

Apache 2 / MIT dual-licensed

Shift_JIS、EUC-JP 和可选的 ISO-2022-JP 之间的日本旧版编码检测器,前提是编码是这些之一。

此检测器通常更准确(但下面关于半角片假名的错误模式),并且比基于机器学习的检测器更快地做出决定。为了决定 EUC-JP,基于机器学习的检测器试图获取输入看起来像 EUC-JP 的信心。为了决定 EUC-JP,此检测器相反寻找输入不是 Shift_JIS 的两个简单规则标志。

由于不包含机器学习表,此 crate 在 encoding_rs 上添加的二进制大小足迹非常小。

文档

docs.rs 上的 API 文档

许可

请参阅名为 COPYRIGHT 的文件。

示例程序使用方法

  1. 安装 Rust
  2. gitclone https://github.com/hsivonen/shift_or_euc
  3. cdshift_or_euc
  4. cargorun --exampledetect 路径到文件

程序将打印以下之一

  • Shift_JIS
  • EUC-JP
  • ISO-2022-JP
  • 未决定

工作原理

检测器基于两个观察结果

  1. ISO-2022-JP 的转义序列通常不会出现在 Shift_JIS 或 EUC-JP 中,因此遇到这样的转义序列(在遇到非 ASCII 之前)可以被视为 ISO-2022-JP 的指标。
  2. 当作为 Shift_JIS 编码的正常(全角)片假名或常用汉字被解码为 EUC-JP 或相反时,结果要么是错误,要么是半角片假名,并且对于日本 HTML 在正常片假名或常用汉字之前有半角片假名字符是非常不常见的。因此,如果解码为 Shift_JIS 导致错误或半角片假名,检测器则决定内容是 EUC-JP,反之亦然。

故障模式

如果文本在正常片假名或常用汉字之前有一个半角片假名字符,检测器会给出错误答案。一些不常见的汉字是不可决定的。(所有 JIS X 0208 Level 1 汉字都是可决定的。)

半角片假名问题主要适用于旧的 8 位 JIS X 0201 仅文本文件,这些文件会正确解码为 Shift_JIS,但检测器会将其检测为 EUC-JP。

在将整个文档输入检测器时,不可解的汉字问题实际上并不会出现,因为在完整的文档中至少包含一个假名或常用汉字。然而,如果检测器仅对文档的前缀进行运行,并且该前缀只包含文档的标题,则可能会出现。文档标题可能完全由不可解的汉字组成。(实际上,日本维基百科有此类标题的文章。)如果检测器无法确定,则通常使用Shift_JIS作为面向Web的更好猜测。

依赖项

~3.5MB
~121K SLoC