2012-04-16 5 views
5

Der Versuch, Linux Curl zu verwenden, um eine XML-Datei von einer URL herunterzuladen.linux curl speichern als utf-8

ziemlich sicher, dass die XML in UTF-8 codiert ist,

ahnend curl -o doesnt als UTF-8 speichern.

Gibt es trotzdem zu erzwingen speichern UTF-8 mit Curl?


Danke für die Anregung, was ich herausgefunden:

Da der XML-Feed dynamisch ist, nicht die ganze Zeit es keine utf-8 Zeichen lang sein. Manchmal hat es überhaupt keine utf-8-Zeichen im gesamten Inhalt, obwohl es im xml-Codierungs- und Header-Inhaltstyp als utf-8 gesetzt ist: charset = utf-8. Wenn es mindestens ein utf-8-Zeichen enthält, wird es als utf-8 gespeichert.

Wenn dies geschieht, lockt curl nicht als utf-8, was sinnvoll ist, da es keine utf-8 Zeichen gibt, warum muss man als utf-8 speichern.

Das ist verdammt knifflig, einige Validatoren müssen gegen utf-8 gültig sein, daher brauche ich immer noch eine Lösung, um es zu utf8 zu zwingen, weil standardmäßig alle meine XML in utf8-encoding sind.

versuchte die vorgeschlagene Verwendung von iconv f iso8859-1 utf-8 funktioniert nicht für diesen Fall, da ich vermute, es ist nicht in iso8859-1 entweder.

Benötigen Sie noch eine bessere Lösung.

+0

Ich glaube nicht, 'curl' überhaupt keine Änderungen macht, was es holt, und es ist sicherlich nicht neu kodieren Text. – geoffspear

+0

hallo danke ... aber ich schaue nicht re-encode Daten, nur wundernd, warum es nicht als utf-8 speichert, während der Inhalt alr utf-8 – flyclassic

+0

Was macht Sie denken, dass es nicht als utf-8 speichern? Was versuchst du eigentlich zu erreichen? – geoffspear

Antwort

7

curl führt keine Konvertierung der heruntergeladenen Datei durch. Wenn der HTTP-Server Ihnen das XML in einer anderen Kodierung (z. B. ISO8859-1) liefert, wird sein wie locken es auch auf der Festplatte speichern.

Ihr Problem zu umgehen, können Sie "iconv" wie folgt verwenden:

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

Hope this Hilfe.

+0

Ich habe diesen Weg versucht, aber es ist immer noch heruntergeladen nicht als utf-8 heruntergeladen. Ich bin ziemlich sicher, dass die XML-Inhalte in utf-8 sind, wie ich es entwickelt habe und überprüft mit mb_check_encoding, dass es wahr mit utf-8 zurückgibt. Wie kann ich den Dateicodierungsstandard in Linux überprüfen? Ich bin mir nicht ganz sicher, ob es sich um iso8859-1 handelt, deshalb funktioniert iconv nicht? Datei -bi funktioniert nicht für mich .. – flyclassic

+0

Sie können die Kodierung einer Datei überprüfen, indem Sie 'Datei FILENAME' eingeben. Bitte posten Sie hier die Ausgabe von 'file' (gegen das mit curl, ohne iconv heruntergeladene XML). – user1202136

+0

Wenn Sie sich auf einem Mac befinden, sich nicht auf iconv verlassen möchten und keine Annahmen über die eingehende Textkodierung fest codieren möchten, können Sie den gleichen Effekt mit 'curl URL | erzielen textutil -cat txt -stdin -stdout -codierung utf-8' – algal

1

Haben Sie versucht, den Accept-Charset-Header hinzuzufügen? Ich hatte ein ähnliches Problem beim Herunterladen einer Datei, die mit der falschen Kodierung heruntergeladen wurde. Wenn ich den Header Accept-Charset gesetzt funktioniert es:

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