我需要找到放在一个目录中的所有文件的编码。有没有办法找到所使用的编码?
file命令不能做到这一点。
我感兴趣的编码是ISO 8859-1。如果是其他编码,我想将文件移动到另一个目录。
我需要找到放在一个目录中的所有文件的编码。有没有办法找到所使用的编码?
file命令不能做到这一点。
我感兴趣的编码是ISO 8859-1。如果是其他编码,我想将文件移动到另一个目录。
当前回答
file -bi <file name>
如果你喜欢对一堆文件这样做
for f in `find | egrep -v Eliminate`; do echo "$f" ' -- ' `file -bi "$f"` ; done
其他回答
file -bi <file name>
如果你喜欢对一堆文件这样做
for f in `find | egrep -v Eliminate`; do echo "$f" ' -- ' `file -bi "$f"` ; done
在PHP中,你可以像这样检查它:
显式指定编码列表:
php -r "echo 'probably : ' . mb_detect_encoding(file_get_contents('myfile.txt'), 'UTF-8, ASCII, JIS, EUC-JP, SJIS, iso-8859-1') . PHP_EOL;"
更准确的"mb_list_encodings":
php -r "echo 'probably : ' . mb_detect_encoding(file_get_contents('myfile.txt'), mb_list_encodings()) . PHP_EOL;"
在第一个示例中,您可以看到我使用了一个可能匹配的编码列表(检测列表顺序)。 为了得到更准确的结果,你可以使用所有可能的编码:mb_list_encodings()
注意mb_*函数需要php-mbstring:
apt-get install php-mbstring
我正在使用以下脚本
找到所有匹配FILTER和SRC_ENCODING的文件 创建它们的备份 将它们转换为DST_ENCODING (可选)删除备份
#!/bin/bash -xe
SRC_ENCODING="iso-8859-1"
DST_ENCODING="utf-8"
FILTER="*.java"
echo "Find all files that match the encoding $SRC_ENCODING and filter $FILTER"
FOUND_FILES=$(find . -iname "$FILTER" -exec file -i {} \; | grep "$SRC_ENCODING" | grep -Eo '^.*\.java')
for FILE in $FOUND_FILES ; do
ORIGINAL_FILE="$FILE.$SRC_ENCODING.bkp"
echo "Backup original file to $ORIGINAL_FILE"
mv "$FILE" "$ORIGINAL_FILE"
echo "converting $FILE from $SRC_ENCODING to $DST_ENCODING"
iconv -f "$SRC_ENCODING" -t "$DST_ENCODING" "$ORIGINAL_FILE" -o "$FILE"
done
echo "Deleting backups"
find . -iname "*.$SRC_ENCODING.bkp" -exec rm {} \;
在Cygwin中,这看起来很适合我:
find -type f -name "<FILENAME_GLOB>" | while read <VAR>; do (file -i "$<VAR>"); done
例子:
find -type f -name "*.txt" | while read file; do (file -i "$file"); done
您可以将其输送到AWK,并创建一个iconv命令,将所有内容从iconv支持的任何源编码转换为UTF-8。
例子:
find -type f -name "*.txt" | while read file; do (file -i "$file"); done | awk -F[:=] '{print "iconv -f "$3" -t utf8 \""$1"\" > \""$1"_utf8\""}' | bash
将ISO 8859-1编码转换为ASCII:
iconv -f ISO_8859-1 -t ASCII filename.txt