我要统一随时间推移在不同计算机上收集的一大堆文本文件的编码。我主要是从ISO-8859-1到UTF-8。这很好地转换了一个文件:
recode ISO-8859-1..UTF-8 file.txt
我当然想对所有文件进行自动批处理,仅对每个文件运行以上操作就会出现问题,即已经使用UTF-8编码的文件的编码将被破坏。(例如,字符“a”最初在ISO-8859-1将出现这样的,视为UTF-8,如果上述重新编码完成两次:� -> ä -> ä
)
我的问题是,什么样的脚本仅在需要时才运行重新编码,即仅针对尚未采用目标编码的文件(在我的情况下为UTF-8)?
通过查看重新编码手册页,我无法弄清楚如何做这样的事情。因此,我认为这归结为如何轻松检查文件的编码,或者至少是UTF-8。这个答案意味着您可以通过重新编码识别有效的UTF-8文件,但是如何呢?只要我可以在bash脚本中有条件地使用结果,其他任何工具也都可以。
该脚本改编自harrymc的想法,该想法有条件地对一个文件进行了编码(基于某些UTF-8编码的斯堪的纳维亚字符的存在),似乎对我来说可以很好地工作。
$ cat recode-to-utf8.sh
#!/bin/sh
# Recodes specified file to UTF-8, except if it seems to be UTF-8 already
result=`grep -c [åäöÅÄÖ] $1`
if [ "$result" -eq "0" ]
then
echo "Recoding $1 from ISO-8859-1 to UTF-8"
recode ISO-8859-1..UTF-8 $1 # overwrites file
else
echo "$1 was already UTF-8 (probably); skipping it"
fi
(批处理文件当然是简单的事,例如for f in *txt; do recode-to-utf8.sh $f; done
。)
注意:这完全取决于脚本文件本身为UTF-8。而且由于这显然是非常有限的解决方案,适合于我碰巧拥有的文件类型,请随时添加更好的答案,以更通用的方式解决问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句