将多个.xml UTF-8文件转换为ISO-8859-1时出错



所以我在过去的两天里一直在尝试所有其他条目的所有可能的解决方案,但到目前为止还没有结果。我们公司开发了一个软件,可以将.XML文件转换为.TXT,同时还可以过滤我们需要的字段。

最近,我们从客户端收到了500多个文件,既无法运行该程序,也无法在浏览器中正确打开该程序。克服这个问题的几种方法是手动删除特殊字符,如ãçèô,或者将编码从UTF-8更改为ISO-8859-1。

感觉到创建一个命令来更改所有文件的编码会更容易,我得到了以下命令:

iconv-c-f UTF-8-t ISO-8859-1 test.xml>test1.xml

通过使用此命令,我可以在浏览器中打开它,并使用我们自己的程序将其正确转换为.TXT。我的挑战是将此命令应用于所有500个文件。我尝试过这些建议,但没有结果:

对于(*.xml)中的%a执行iconv-c-f UTF-8-t ISO-8859-1%a

查找-name".xml"-exec iconv-c-f UTF-8-t ISO-8859-1

还有这两个的其他几个变体,但到目前为止我还没有结果。。。欢迎任何想法或建议。提前谢谢!

更新:

我决定尝试使用重新编码

重新编码UTF-8..ISO-8859-1*.xml

但它返回:

失败:步骤"UTF-8..ISO-8859-1"中的输入无效

更新2:

我找到了一个解决方案,通过强制执行recode函数。这就是命令的样子:

recode-f UTF-8..ISO-8859-1*xml

我必须说,所有的特殊字符,如ã,ç,ê在这个过程中都丢失了,但由于我只需要访问数字,这个解决方案对我来说很好。我相信有一种更干净的方法可以做到这一点,而不会丢失信息,但这对我来说有效…

如果您要使用Linux,使用bash语法的正确答案是:

用于*.xml中的a;do iconv-c-f UTF-8-t ISO-8859-1$a;完成

将此语法应用于一批文件会产生以下命令行(目标名称由.suffix(或您选择的任何名称)附加:

用于*.xml中的a;do iconv-c-f UTF-8-t ISO-8859-1$a.后缀;完成

对于Windows环境,此答案将不适用(请参阅注释)

我找到了这个问题的一个简单答案。通过使用recode函数,我可以轻松地批量重新编码我需要的所有文件。这个解决方案确实删除了所有特殊的字符,但由于我只需要访问文件中的数字,我可以接受。

这是我使用的代码:

CD file-location-path
recode -f UTF-8..ISO-8859-1 *.xml

正如我所说,我确信这不是最干净或最好的方法,但它对我有效……也许它也会帮助其他人。