2012-04-16 117 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