如何将目录中的.xml文件大规模转换为UTF-8,同时保留相同的文件名


0

我有许多以ISO-8859-1编码的.xml文件,我希望它们都是UTF-8。

我想出了单独转换它们的代码,它是:

iconv -f ISO-8859-1 -t UTF-8 filename.xml > newfilename.xml

它工作正常。

我想知道的是如何编写一个shell脚本来自动清理目录中的所有.xml文件,然后用新转换的文件替换旧文件,但仍然保持相同的文件名。

我是shell脚本的新手,所以非常感谢帮助。


这不安全,因为它会在文件开头复制XML声明不变。需要更改XML声明以反映新编码。
Michael Kay

这可以通过使用SED来完成...... sed -i 's/olddec/newdec/g' 只需将其插入iconv行之前的for循环中即可
Fegnoid

Answers:


2

你可以在bash shell的命令行上执行此操作

for i in *.xml; do
    iconv -f ISO-8859-1 -t UTF-8 "$i" > "$i.1" && mv "$i.1" "$i"
done

这基本上采用所有xml文件,通过Iconv将它们放到filname.xml.1,然后将该文件移回原始文件名

快速浏览一下iconv,这就是我认为应该是的(如果你使用的是GNU版本)

for i in *.xml; do
    iconv -sc -f ISO-8859-1 -t UTF-8 "$i" > "$i.1" && mv "$i.1" "$i"
done

-s选项会使警告静音,-c选项会忽略输出中的无效字符。


嗨Fegnoid,代码工作,但似乎它运行,直到第一个字符序列不正确,并删除其余的行,例如第一个字符不正确是在第5000行,它纠正,然后删除一切在5000行之后。线路接近35000线...任何想法为什么这样做?
Tren

这可能更像是与iconv ...我不得不承认我不太了解
Fegnoid

@Fegnoid:试试 重新编码 , 它有一个 -force 选项。 “使用此选项,不可逆转或其他错误的重新编制将完成” 。它也可以一次处理多个文件。
RedGrittyBrick

我在我的回答中添加了-sc选项,这应该让它运行完成
Fegnoid
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.