1 个不稳定版本
0.1.0 | 2019年4月16日 |
---|
#1857 在 文本处理
在 shift_or_euc_c 中使用
16KB
161 行
shift_or_euc
Shift_JIS、EUC-JP 和可选的 ISO-2022-JP 之间的日本旧版编码检测器,前提是编码是这些之一。
此检测器通常更准确(但下面关于半角片假名的错误模式),并且比基于机器学习的检测器更快地做出决定。为了决定 EUC-JP,基于机器学习的检测器试图获取输入看起来像 EUC-JP 的信心。为了决定 EUC-JP,此检测器相反寻找输入不是 Shift_JIS 的两个简单规则标志。
由于不包含机器学习表,此 crate 在 encoding_rs
上添加的二进制大小足迹非常小。
文档
许可
请参阅名为 COPYRIGHT 的文件。
示例程序使用方法
- 安装 Rust
gitclone https://github.com/hsivonen/shift_or_euc
cdshift_or_euc
cargorun --exampledetect 路径到文件
程序将打印以下之一
- Shift_JIS
- EUC-JP
- ISO-2022-JP
- 未决定
工作原理
检测器基于两个观察结果
- ISO-2022-JP 的转义序列通常不会出现在 Shift_JIS 或 EUC-JP 中,因此遇到这样的转义序列(在遇到非 ASCII 之前)可以被视为 ISO-2022-JP 的指标。
- 当作为 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