我需要找到放在一个目录中的所有文件的编码。有没有办法找到所使用的编码?

file命令不能做到这一点。

我感兴趣的编码是ISO 8859-1。如果是其他编码,我想将文件移动到另一个目录。


当前回答

uchardet -从Mozilla移植的编码检测器库。

用法:

~> uchardet file.java
UTF-8

各种Linux发行版(Debian、Ubuntu、openSUSE、Pacman等)都提供二进制文件。

其他回答

在Debian中你也可以使用:encguess:

$ encguess test.txt
test.txt  US-ASCII

由于它是一个perl脚本,它可以安装在大多数系统上,通过安装perl或脚本作为独立的,如果perl已经安装。

$ dpkg -S /usr/bin/encguess
perl: /usr/bin/encguess

uchardet -从Mozilla移植的编码检测器库。

用法:

~> uchardet file.java
UTF-8

各种Linux发行版(Debian、Ubuntu、openSUSE、Pacman等)都提供二进制文件。

您可以使用file命令提取单个文件的编码。我有一个sample.html文件:

$ file sample.html 

HTML: HTML文档,UTF-8 Unicode文本,有很长的行

$ file -b sample.html

HTML文档,UTF-8 Unicode文本,有很长的行

$ file -bi sample.html

短信/ html;charset = utf-8

$ file -bi sample.html  | awk -F'=' '{print $2 }'

utf - 8

在Python中,你可以使用chardet模块。

使用这个命令:

for f in `find .`; do echo `file -i "$f"`; done

您可以列出一个目录和子目录中的所有文件以及相应的编码。

如果文件名称中有空格,请使用:

IFS=$'\n'
for f in `find .`; do echo `file -i "$f"`; done

记住,它会将当前Bash会话解释器更改为“空格”。