Bla*_*ner 19 linux ubuntu encoding utf-8 iconv
我试图将iconv指向一个目录,所有文件都将转换为UTF-8,无论当前编码如何
我正在使用此脚本,但您必须指定要进行的编码.如何让它自动检测当前编码?
dir_iconv.sh
#!/bin/bash
ICONVBIN='/usr/bin/iconv' # path to iconv binary
if [ $# -lt 3 ]
then
echo "$0 dir from_charset to_charset"
exit
fi
for f in $1/*
do
if test -f $f
then
echo -e "\nConverting $f"
/bin/mv $f $f.old
$ICONVBIN -f $2 -t $3 $f.old > $f
else
echo -e "\nSkipping $f - not a regular file";
fi
done
Run Code Online (Sandbox Code Playgroud)
终点线
sudo convert/dir_iconv.sh convert/books CURRENT_ENCODING utf8
Run Code Online (Sandbox Code Playgroud)
Mic*_*man 18
也许您正在寻找enca:
Enca是一款非常天真的Charset分析仪.它可以检测文本文件的字符集和编码,还可以使用内置转换器或外部库以及libiconv,librecode或cstocs等工具将它们转换为其他编码.
目前它支持白俄罗斯语,保加利亚语,克罗地亚语,捷克语,爱沙尼亚语,匈牙利语,拉脱维亚语,立陶宛语,波兰语,俄语,斯洛伐克语,斯洛文尼亚语,乌克兰语,中文和一些独立于语言的多字节编码.
请注意,通常,当前编码的自动检测是一个困难的过程(相同的字节序列可以是多个编码中的正确文本).enca使用基于您告诉它检测的语言的启发式(以限制编码的数量).您可以使用enconv到文本文件转换到一个单一的编码.
小智 10
您可以使用标准gnu utils文件和awk获得所需内容.例:
file -bi .xsession-errors
给了我:"text/plain; charset = us-ascii"
所以file -bi .xsession-errors |awk -F "=" '{print $2}'
给我"us-ascii"
我在脚本中使用它是这样的:
CHARSET="$(file -bi "$i"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$i" -o outfile
fi
Run Code Online (Sandbox Code Playgroud)
小智 6
编译所有这些.转到目录,创建dir2utf8.sh:
#!/bin/bash
# converting all files in a dir to utf8
for f in *
do
if test -f $f then
echo -e "\nConverting $f"
CHARSET="$( file -bi "$f"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$f" -o "$f"
fi
else
echo -e "\nSkipping $f - it's a regular file";
fi
done
Run Code Online (Sandbox Code Playgroud)
小智 5
这是我使用recode和uchardet放置所有文件的解决方案:
#!/bin/bash
apt-get -y install recode uchardet > /dev/null
find "$1" -type f | while read FFN # 'dir' should be changed...
do
encoding=$(uchardet "$FFN")
echo "$FFN: $encoding"
enc=`echo $encoding | sed 's#^x-mac-#mac#'`
set +x
recode $enc..UTF-8 "$FFN"
done
Run Code Online (Sandbox Code Playgroud)
放入convert-dir-to-utf8.sh并运行:
bash convert-dir-to-utf8.sh /pat/to/my/trash/dir
Run Code Online (Sandbox Code Playgroud)
请注意,这里sed是 mac 编码的解决方法。许多不常见的编码需要这样的解决方法。
| 归档时间: |
|
| 查看次数: |
41537 次 |
| 最近记录: |