2012-10-21 8 views
57

Ich habe eine Reihe von arabischen, englischen, russischen Dateien, die in utf-8 codiert sind. Der Versuch, diese Dateien zu verarbeiten, um einen Perl-Skript, ich diesen Fehler:So entfernen Sie nicht UTF-8 Zeichen aus der Textdatei

Malformed UTF-8 character (fatal) 

manuell den Inhalt dieser Dateien überprüft, fand ich in ihnen ein paar seltsamen Zeichen. Jetzt suche ich nach einer Möglichkeit, diese Zeichen automatisch aus den Dateien zu entfernen.

Gibt es trotzdem, es zu tun?

+2

Vielleicht ist es das gleiche wie folgt aus: http://stackoverflow.com/questions/7656283/malformed-utf-8-character-fatal-error-while-parsing-xml-using-xmllibxml –

+2

entnehmen Sie bitte diesen Link: http://unix.stackexchange.com/questions/6516/filtering-invalid-utf8 – askmish

+3

Was sind keine UTF-8-Zeichen? Alle Zeichen in einer wohlgeformten UTF-8-Zeichenfolge sind UTF-8-Zeichen (eigentlich Unicode-Zeichen)! Einige von ihnen sind UTF-8, die in mehreren aufeinanderfolgenden Bytes codiert sind. –

Antwort

0

Ihre Methode muss byteweise gelesen werden und die Byte-weise Konstruktion von Zeichen vollständig verstehen und schätzen. Die einfachste Methode besteht darin, einen Editor zu verwenden, der alles liest, aber nur UTF-8-Zeichen ausgibt. Textpad ist eine Wahl.

+0

iconv ist in cygwin nicht verfügbar. Gibt es eine Möglichkeit, dies unter Windows/Cygwin zu tun? Ich habe eine große (100000+ Zeilen) XML-Datei, die ungültige Zeichen entfernen muss. Es ist mir egal, gültige utf-8. Ich habe notepad ++ auf utf-8 gesetzt, aber selbst nach dem Speichern von dort bekomme ich immer noch Fehler im XML-Parser – mljm

111

Dieser Befehl:

iconv -f utf-8 -t utf-8 -c file.txt 

Ihre UTF-8-Datei bereinigen, alle ungültigen Zeichen zu überspringen.

-f is the source format 
-t the target format 
-c skips any invalid sequence 
+10

"iconv -f utf-8 -t utf-8 -c file.txt" auf einem Mac. Bindestrich zwischen 'f' und '8' – Colin

+0

Richtig, Bindestriche sind erforderlich. Danke für die Bearbeitung. Sie können die Liste der unterstützten Kodierungen über iconv --list – Palantir

+0

erhalten. Praktisch können Sie den Inhalt der Zwischenablage auf einem Mac so verändern: 'pbpaste | iconv -f utf-8 -t -utf-8 -c | pbcopy'. Ich habe auch einen Alfred-Workflow mit einer globalen Abkürzung für das Entfernen aller Sonderzeichen erstellt, indem ich Ascii anvisiere. –

-2
cat foo.txt | strings -n 8 > bar.txt 

wird die Arbeit machen.

+7

Nein, dies wird auch eine Menge gültiger utf-8 Zeichen töten. –

Verwandte Themen