有许多纯文本文件是用不同的字符集编码的。
我想将它们全部转换为 UTF-8,但在运行 iconv 之前,我需要知道它们的原始编码。大多数浏览器都有Auto Detect
编码选项,但是我无法逐个检查这些文本文件,因为它们太多了。
只要知道原始编码,我就能转换文本iconv -f DETECTED_CHARSET -t utf-8
。
有没有什么工具可以检测纯文本文件的编码?它不必 100% 完美,我不介意 1,000,000 个文件中有 100 个文件转换错误。
答案1
尝试沙尔代Python 模块,可在 PyPI 上获取:
pip install chardet
然后运行chardetect myfile.txt
。
Chardet 基于检测代码Mozilla 使用的,因此它应该会给出合理的结果,前提是输入文本足够长,可以进行统计分析。请阅读项目文档。
正如评论中提到的那样,它非常慢,但一些发行版也附带了原始的 C++ 版本,正如@Xavier 发现的那样https://superuser.com/a/609056某个地方也有 Java 版本。
答案2
我会使用这个简单的命令:
encoding=$(file -bi myfile.txt)
或者如果您只想要实际的字符集(如utf-8
):
encoding=$(file -b --mime-encoding myfile.txt)
答案3
在基于 Debian 的 Linux 上,乌查尔德包裹 (Debian/Ubuntu)提供了一个命令行工具。请参阅下面的软件包描述:
universal charset detection library - cli utility
.
uchardet is a C language binding of the original C++ implementation
of the universal charset detection library by Mozilla.
.
uchardet is a encoding detector library, which takes a sequence of
bytes in an unknown character encoding without any additional
information, and attempts to determine the encoding of the text.
.
The original code of universalchardet is available at
http://lxr.mozilla.org/seamonkey/source/extensions/universalchardet
.
Techniques used by universalchardet are described at
http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html
答案4
对于经常使用 Emacs 的人来说,他们可能会发现以下内容很有用(允许手动检查和验证转换)。
而且我经常发现 Emacs 字符集自动检测比其他字符集自动检测工具(例如 chardet)效率更高。
(setq paths (mapcar 'file-truename '(
"path/to/file1"
"path/to/file2"
"path/to/file3"
)))
(dolist (path paths)
(find-file path)
(set-buffer-file-coding-system 'utf-8-unix)
)
然后,只需以该脚本作为参数简单调用 Emacs(参见“-l”选项)即可完成该工作。