如何确定文本文件的编码表
Posted
技术标签:
【中文标题】如何确定文本文件的编码表【英文标题】:How to determine encoding table of a text file 【发布时间】:2011-05-14 09:47:43 【问题描述】:我有.txt
和.java
文件,但我不知道如何确定文件的编码表(Unicode、UTF-8、ISO-8525,...)。是否有任何程序可以确定文件编码或查看编码?
【问题讨论】:
How to reliably guess the encoding between MacRoman, CP1252, Latin1, UTF-8, and ASCII的可能重复 【参考方案1】:如果您使用的是 Linux,请尝试 file -i filename.txt
。
$ file -i vol34.tex
vol34.tex: text/x-tex; charset=us-ascii
供参考,这是我的环境:
$ which file
/usr/bin/file
$ file --version
file-5.09
magic file from /etc/magic:/usr/share/misc/magic
一些file
版本(例如OS X/macOS 上的file-5.04)的命令行开关略有不同:
$ file -I vol34.tex
vol34.tex: text/x-tex; charset=us-ascii
$ file --mime vol34.tex
vol34.tex: text/x-tex; charset=us-ascii
另外,看看here。
【讨论】:
它返回:somefile.txt:普通文件file --version
带给你什么?
file-5.04 ,而且,我在 Mac 上
查看我的更新答案。感谢您指出。另外,man
是你的朋友 :)【参考方案2】:
您无法可靠地检测文本文件中的编码 - 您可以做的是制作一个 通过搜索非 ascii 字符并尝试确定它是否是有根据的猜测 在您正在解析的语言中有意义的 unicode 组合。
【讨论】:
【参考方案3】:看到这个question and the selected answer。没有万无一失的方法。最多,你可以排除一些事情。 UTF 编码你不太可能得到误报,但 8 位编码很难,特别是如果你不知道起始语言。目前没有任何工具可以处理来自 Mac、Windows、Unix 的所有常见 8 位编码,但所选答案提供了一种算法方法,该方法应该适用于特定的编码子集。
【讨论】:
【参考方案4】:使用 Notepad++ 打开文件,会在右下角看到编码表名称。并且在菜单编码中可以更改编码表并保存文件。
【讨论】:
【参考方案5】:在文本文件中没有保存编码的标题左右。您可以尝试使用 linux/unix 命令find
来猜测编码:
file -i unreadablefile.txt
或在某些系统上
file -I unreadablefile.txt
但这通常会给你text/plain; charset=iso-8859-1
,尽管文件不可读(神秘的字形)。
这是我在安装iconv
之后为不可读文件找到正确的文件编码然后将其转换为utf8 所做的。首先,我尝试了所有编码,显示 (grep
) 一行包含单词 www.(一个网站地址):
for ENCODING in $(iconv -l); do echo -n "$ENCODING "; iconv -f $ENCODING -t utf-8 unreadablefile.txt 2>/dev/null| grep 'www'; done | less
最后一个命令行显示测试的文件编码,然后是翻译/转码的行。
有些行显示出可读且一致(一次一种语言)的结果。我手动尝试了其中一些,例如:
ENCODING=WINDOWS-936; iconv -f $ENCODING -t utf-8 unreadablefile.txt -o test_with_$ENCODING.txt
在我的例子中,它是一个中文 windows 编码,现在可以阅读(如果你懂中文的话)。
【讨论】:
【参考方案6】:是否有任何程序可以确定文件编码或查看编码?
当我写这篇文章时,这个问题已经 10 年了,答案仍然是“不”——至少不可靠。不幸的是,没有太大的改善。我最近的经验表明file -I
命令非常“hit-or-miss”。例如,在 macOS 10.15.6 上检查文本文件时:
% file -i somefile.asc
somefile.asc: application/octet-stream; charset=binary
somefile.asc
是一个文本文件。其中的所有字符都以 UTF-16 Little Endian 编码。我怎么知道的?我使用了BBedit
- 一个称职的文本编辑器。确定文件中使用的编码当然是一个棘手的问题,但是...?
【讨论】:
以上是关于如何确定文本文件的编码表的主要内容,如果未能解决你的问题,请参考以下文章