2012-04-16 114 views
5

尝试使用linux curl从url下载xml文件。linux curl另存为utf-8

漂亮确保XML是UTF-8编码,

怀疑卷曲-o犯规保存为UTF-8。

无论如何强制保存为UTF-8卷曲?


感谢您的建议,我发现了什么:

因为XML饲料是动态的,不是所有的时间是否包含任何UTF-8字符。 即使它在xml编码和标头内容类型中设置为utf-8,它在整个内容中也没有utf-8字符:charset = utf-8。至少包含utf-8字符时,将保存为utf-8。

发生这种情况时,curl不会以utf-8的形式下载,这是因为没有utf-8字符,因此需要存储为utf-8。

这是非常棘手的,有些验证器必须对utf-8有效,因此我仍然需要一个解决方案来强制它为utf8,因为默认情况下我所有的xml shld都是utf8编码。

尝试使用iconv f iso8859-1 UTF-8建议不适用于这种情况,因为我怀疑它不在iso8859-1中。

仍然需要更好的解决方案。

+0

我不相信'curl'使得在所有的任何修改它所获取,它当然不重新编码的文本。 – geoffspear 2012-04-16 10:23:19

+0

嗨,谢谢...但是我不想重新编码数据,只是想知道为什么它不保存为utf-8,而内容是alf utf-8 – flyclassic 2012-04-17 01:58:05

+0

是什么让你觉得它不是保存为utf-8?你究竟在努力完成什么? – geoffspear 2012-04-17 10:32:35

回答

7

curl不会对其下载的文件进行任何转换。如果HTTP服务器以另一种编码方式(例如ISO8859-1)为您提供XML,那么他的卷曲方式也会将其保存到磁盘。

要解决你的问题,你可以按如下方式使用 “的iconv”:

curl URL | iconv -f iso8859-1 -t utf-8 > output.xml 

希望这有助于。

+0

我试过这种方式,但它仍然没有下载为utf-8。我很确定xml内容是在utf-8中,因为我已经开发了它,并使用mb_check_encoding进行了检查,它使用utf-8返回true。我如何检查Linux中的文件编码标准?我不太确定,如果它变成iso8859-1这就是为什么iconv不起作用?文件-bi不适用于我.. – flyclassic 2012-04-17 02:40:20

+0

您可以通过键入'file FILENAME'来检查文件的编码。请在这里发布'file'的输出(针对使用curl下载的XML,不带iconv)。 – user1202136 2012-04-17 08:08:57

+0

如果您使用的是Mac,不想依赖iconv,也不想对传入的文本编码进行硬编码,您可以使用'curl URL | textutil -cat txt -stdin -stdout -encoding utf-8' – algal 2014-03-13 21:56:01

1

你试过添加Accept-Charset头吗?我有一个类似的问题下载一个文件,它是用错误的编码下载的。当我设置了接收字符集报头工作原理:

curl -H "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" URL | iconv -f iso8859-1 -t utf-8 > output.xml