【问题标题】:How to check character encoding of a file in Linux如何在 Linux 中检查文件的字符编码
【发布时间】:2018-07-21 14:30:04
【问题描述】:

我有一些由不同字符编码方式编码的文本文件,例如asciiutf-8big5gb2312

现在我想知道它们准确的字符编码,以便用文本编辑器查看,否则会出现乱码。

我在网上搜索,发现file命令可以display the character encoding of a file,比如:

$ file -bi *
text/plain; charset=iso-8859-1
text/plain; charset=us-ascii
text/plain; charset=iso-8859-1
text/plain; charset=utf-8

不幸的是,用big5gb2312 编码的文件都存在charset=iso-8859-1,所以我仍然无法区分。 有没有更好的方法来检查文本文件的字符编码?

【问题讨论】:

  • 你试过uchardetenconv吗?
  • @ewcz 谢谢。他们工作。
  • 您无法可靠地检查编码,您只能猜测。 file 猜测错误,uchardet 更好,但两者都在猜测。
  • 我很难相信你有 ASCII 编码文件。您的文件当前内容仅限于 C0 控件和基本拉丁字符的可能性更大。如果文件确实是 ASCII,也许您有这样的规范或标准。那么你就不需要猜测程序了。
  • 当有人写一个文本文件时,他们选择了一种字符编码。那几乎从来不是ASCII。如果他们要选择 ASCII,他们可能会因为规范或标准而这样做。在任何情况下,阅读器都必须使用相同的编码来读取文件。因此,规范或标准是了解正在使用哪种编码的一种方法,您应该可以使用它。猜测非常粗略。您可以从样本中执行此操作。但是,如果文件是重复过程的一部分,那么该文件将来可能具有不同的内容,这可能会使猜测无效。

标签: linux encoding utf-8 character-encoding


【解决方案1】:

在某种程度上,@ewcz 的建议有效。

$ uchardet *
big5.txt: BIG5
conf: ASCII
gb2312-windows.txt: GB18030
gb.txt: GB18030
test.java: UTF-8

enca -L chinese *
big5.txt: Traditional Chinese Industrial Standard; Big5
conf: 7bit ASCII characters
gb2312-windows.txt: Simplified Chinese National Standard; GB2312
  CRLF line terminators
gb.txt: Simplified Chinese National Standard; GB2312
test.java: Universal transformation format 8 bits; UTF-8

【讨论】:

  • uchardet 的巨大优势在于它可以分析整个文件(仅尝试使用 20GiB 文件),而不是 fileenca
【解决方案2】:

你可以使用像detect-file-encoding-and-language这样的命令行工具:

$ npm install -g detect-file-encoding-and-language

然后你可以像这样检测编码:

$ dfeal "/home/user name/Documents/subtitle file.srt"
# Possible result: { language: french, encoding: CP1252, confidence: { language: 0.99, encoding: 1 } }

确保您已安装 Node.js 和 NPM!如果您还没有安装它:

$ sudo apt install nodejs npm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 2011-01-22
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多