/ / Perl entfernt fehlerhafte Hexadezimalbytes in einer UTF-Zeichenfolge - perl, utf-8, byte, strip

Perl entfernt fehlerhafte Hexadezimalbytes in einer UTF-Zeichenfolge - Perl, UTF-8, Byte, Strip

Ich habe eine Situation, in der mein Perl-Parser lesen wirdFlache Eingabedatei mit fester Breite basierend auf der Spezifikation (Anfang, Ende, Länge jedes definierten Feldes) und erstellt eine durch Kommas getrennte Datei, die in die Datenbank geladen werden soll.

Die Eingabedatei kann ISO-LATIN-1 oder utf-8 sein. Unabhängig vom Zeichensatz, die Perl 's funktioniert gut beim Erstellen der Komma getrennte Dateien in Ordnung (ISO-LATIN-1 zu ISO-LATIN-1 und UTF8 zu UTF8)

Da belegen ISO-LATIN-1 Zeichen nur ein Bytees gibt nie ein Problem. Aber die utf-8 verursacht ein Problem, nachdem die Daten in die Datenbank geladen werden. Da der Perl-Parser beim Lesen der Eingabedaten durch Bytes geht, wenn es ein Feld von 40 gibt Byte-Länge, aber es gibt ein utf-Zeichen, das die Positionen 39, 40, 41 besetzt, dann werden nur die ersten 2 Bytes in das Feld extrahiert und dasselbe wird in die Datenbank geladen.

Gibt es eine Möglichkeit für Perl, diese Zeichenfolge zu lesen und die schlechten Bytes gegen Ende der Zeichenfolge zu entfernen?

Für zB: Sagen wir, es gibt ein 6-Byte-Feld und die Zeichenfolge ist Â8Ä, wobei die Bytefolge c382 38 c384 c382 (das sind 7 Bytes). Wenn der Perl-Parser diese Daten analysiert, scheint er Â8Ä zu holen, aber die Byte-Werte zu betrachten es extrahiert c382 38 c384 c3. Dort "ein halbes Byte c3 am Ende. Gibt es eine Möglichkeit, diese Art von schlechten Bytes per Perl zu entfernen?

Antworten:

0 für die Antwort № 1

Sieh dir das an:

Das "U" Template-Format der Perl-Pack-Funktion auf dieser Seite: http://www.misc-perl-info.com/perl-pack.html

Dies:

http://ahinea.com/en/tech/perl-unicode-struggle.html

und das:

Perl: utf8 :: decode vs. Encode :: decode