2 Stimmen

Perl, Unicode und Gebietsschemata: Wie verarbeitet man einen String in einem nicht-utf8 Gebietsschema mit `perl -p -i -e'?

setopt rcquotes
zsh -c 'export LANG="ru_RU.CP1251"; echo " " | iconv -f utf8 | perl -p -i -e ''BEGIN{use open ":locale"}s/\p{InCyrillic}//g'''

gibt mir eine Reihe von Fehlern:

"\x{00d0}" does not map to cp1251, <> line 1.
"\x{00b9}" does not map to cp1251, <> line 1.

Was sollte getan werden, um diese Fehler nicht zu erhalten (beachten Sie, dass das Gebietsschema beliebig sein kann).

3voto

daxim Punkte 38607

Sie haben vergessen, die Kodierung des Ersetzungstextes anzugeben. Update : In der ersten Überarbeitung hatte ich eine Lösung mit dem unangenehmen encoding pragma. Es kann vollständig vermieden werden, aber der Standardweg wie unten ist mir aus irgendeinem Grund bis jetzt nicht in den Sinn gekommen.

bash> export LANG=ru_RU.koi8r   # I do not have CP…

bash> echo " " | iconv -f UTF-8 | hex
0000  f2 d5 d3 d3 cb c9 ca 20  d4 c5 cb d3 d4 0a          .

bash> echo " " | iconv -f UTF-8 | perl -p -i -e'BEGIN {use open ":locale"}; use utf8; s/\p{InCyrillic}//g' | hex
0000  ca ca ca ca ca ca ca 20  ca ca ca ca ca 0a          .

bash> echo " " | iconv -f UTF-8 | perl -p -i -e'BEGIN {use open ":locale"}; use utf8; s/\p{InCyrillic}//g' | iconv -t UTF-8

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X