我需要找到放在一个目录中的所有文件的编码。有没有办法找到所使用的编码?
file命令不能做到这一点。
我感兴趣的编码是ISO 8859-1。如果是其他编码,我想将文件移动到另一个目录。
我需要找到放在一个目录中的所有文件的编码。有没有办法找到所使用的编码?
file命令不能做到这一点。
我感兴趣的编码是ISO 8859-1。如果是其他编码,我想将文件移动到另一个目录。
当前回答
下面是一个在Mac OS X上使用file -I和iconv的示例脚本。
对于你的问题,你需要使用mv而不是iconv:
#!/bin/bash
# 2016-02-08
# check encoding and convert files
for f in *.java
do
encoding=`file -I $f | cut -f 2 -d";" | cut -f 2 -d=`
case $encoding in
iso-8859-1)
iconv -f iso8859-1 -t utf-8 $f > $f.utf8
mv $f.utf8 $f
;;
esac
done
其他回答
您可以使用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
在Perl中,使用Encode::Detect。
听起来你在找恩卡。它可以猜测甚至在编码之间进行转换。看看手册页就知道了。
否则,使用file -i (Linux)或file -i (OS X)。这将输出文件的mime类型信息,其中还将包括字符集编码。我也找到了它的手册页:)
下面是一个在Mac OS X上使用file -I和iconv的示例脚本。
对于你的问题,你需要使用mv而不是iconv:
#!/bin/bash
# 2016-02-08
# check encoding and convert files
for f in *.java
do
encoding=`file -I $f | cut -f 2 -d";" | cut -f 2 -d=`
case $encoding in
iso-8859-1)
iconv -f iso8859-1 -t utf-8 $f > $f.utf8
mv $f.utf8 $f
;;
esac
done
将ISO 8859-1编码转换为ASCII:
iconv -f ISO_8859-1 -t ASCII filename.txt