Ich versuche, ein Perl-Skript mit dem Pragma "utf8" zu schreiben, und erhalte unerwartete Ergebnisse. Ich verwende Mac OS X 10.5 (Leopard) und bearbeite mit TextMate. Alle meine Einstellungen für meinen Editor und mein Betriebssystem sind standardmäßig auf das Schreiben von Dateien im utf-8-Format eingestellt.
Wenn ich jedoch Folgendes in eine Textdatei eingebe, es als ".pl" speichere und ausführe, erhalte ich anstelle der Nicht-ASCII-Zeichen den freundlichen "Diamanten mit einem Fragezeichen".
#!/usr/bin/env perl -w
use strict;
use utf8;
my $str = 'Çirçös';
print( "$str\n" );
Irgendeine Idee, was ich falsch mache? Ich erwarte 'Çirçös' in der Ausgabe, aber ich bekomme stattdessen ' ir s'.
utf8
:Antworten:
use utf8;
aktiviert die Unicode- Ausgabe nicht - Sie können Unicode in Ihr Programm eingeben. Fügen Sie dies dem Programm vor Ihrerprint()
Aussage hinzu:Sehen Sie, ob das hilft. Das sollte die
STDOUT
Ausgabe in UTF-8 anstelle von gewöhnlichem ASCII machen.quelle
Sie können das offene Pragma verwenden .
Zum Beispiel. unten werden STDOUT, STDIN & STDERR für die Verwendung von UTF-8 festgelegt ....
quelle
TMTOWTDI , wählen Sie die Methode, die am besten zu Ihrer Arbeitsweise passt. Ich verwende die Umgebungsmethode, damit ich nicht darüber nachdenken muss.
In der Umwelt :
in der Kommandozeile :
oder mit binmode :
oder mit PerlIO :
oder mit dem offenen Pragma :
quelle
SDL
sowohl mit-C
als auch impliziert istPERL_UNICODE
.use open ':locale'
Erwähnenswert ist auch das Pragma, da es das In-Script-Äquivalent von-C
und istexport PER_UNICODE=
. Mit jeder dieser drei Optionen erhalten Sie UTF8-Unterstützung für alle Eingabe- und Ausgabestreams (ob Dateien oder stdin / stdout / stderr), vorausgesetzt, das Gebietsschema Ihrer Umgebung basiert auf UTF8. Schließlich auch treat Quelle Code als UTF8, verwenden Sie dieuse utf8;
Pragma.perl -Mutf8 -CSDL -e '...'
Ermöglicht das Konsumieren / Ausgeben von UTF-8 sowie das Verwenden von UTF-8-Literalen im Inneren,-e
z. B. für denperl -Mutf8 -CASDL -pe 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/'
Sie möchten auch sagen, dass Zeichenfolgen in Ihrem Code utf-8 sind. Siehe Warum vermeidet modernes Perl standardmäßig UTF-8? . Also nicht nur
PERL_UNICODE=SDAL
sondern auch einstellenPERL5OPT=-Mutf8
.quelle
Danke, endlich eine Lösung, um utf8 :: encode nicht über den gesamten Code zu setzen. Zum Synthetisieren und Vervollständigen für andere Fälle, wie das Schreiben und Lesen von Dateien in utf8, und funktioniert auch mit LoadFile einer YAML-Datei in utf8
wo cache.yaml ist:
quelle
Mach in deiner Shell: $ env | grep LANG
Dies wird wahrscheinlich zeigen, dass Ihre Shell kein utf-8-Gebietsschema verwendet.
quelle