Bitte lassen Sie mich zuerst feststellen, dass dieses Problem eng mit dem Perl Diamant Operator Annahme von Eingaben, die direkt auf der Tastatur eingegeben wurde.Umlaute Zeichen nicht über Tastatur (Codepage 65001, UTF-8) von Perl Skript
Hätte ich über den perl diamond-Operator gesprochen, der eine Eingabe akzeptiert, die von Text aus einer Datei piped oder anderweitig stammt, dann wäre das ein Duplikat der Frage 519309 - How do I read Utf-8 with diamond operator.
Es geht jedoch nicht um Piped- oder Dateidaten, sondern um Eingaben, die direkt auf der Tastatur eingegeben wurden. Deshalb habe ich argumentieren, ist diese Frage nicht ein Duplikat 519309.
Hier werden die Details meiner Frage sind:
ich Umlaute versuche zu verwenden (‚ä‘, ‚ö‘, ‚ü‘, ...) auf meiner Tastatur.
Ich habe einen sehr einfachen Perl-Skript, das eine Linie von der Tastatur akzeptiert und dann druckt ihn sofort wieder heraus zu Bildschirm:
Wenn ich Umlaute mit Codepage 1252 verwenden, dann funktioniert alles wie erwartet:
C:\>chcp 1252 & perl -CS -we"print '*** '; $txt = <>; print '--- ', $txt;"
Page de codes active : 1252
*** ü
--- ü
Allerdings, wenn ich die gleichen Umlaute mit Codepage 65001 (UTF-8) verwenden, dann bekomme ich eine Warnung nicht initialisierten Wert und der Umlaut nicht akzeptiert wird:
C:\>chcp 65001 & perl -CS -we"print '*** '; $txt = <>; print '--- ', $txt;"
Page de codes active : 65001
*** ü
Use of uninitialized value $txt in print at -e line 1.
---
Wenn ich Pfeife des Umlaut in mein Perl-Programm, dann habe ich kein Problem:
C:\>chcp 65001 & echo ü | perl -CS -we"print '*** '; $txt = <>; print '--- ', $txt;"
Page de codes active : 65001
*** --- ü
Warum erhalte ich diese Warnung mit Codepage 65001 (UTF-8)?
Ich benutze Windows 7 x64, mit Strawberry Perl 5.22.
Nur für den Datensatz, wenn ich reine Batch-Befehle verwenden (das ist ich nicht perl verwenden), kann ich erfolgreich umlaut Zeichen mit Codepage 65001 (UTF-8) eingeben.
C:\>chcp 65001 & set /p txt=*** & echo --- %txt%
Page de codes active : 65001
*** ü
--- ü
Die Frage ist wirklich: Warum ist Perl nicht in der Lage Umlaut per Tastatur mit Codepage 65001, während der gleichen Tastatureingabe, gleiche Codepage 65001, arbeitet ok als reiner DOS-Batch-Befehl zu akzeptieren?
Es scheint etwas grundsätzlich anders zu sein zwischen Umlauten und Umlauten direkt von der Tastatur.
Warum funktioniert die Eingabe eines Umlautzeichens auf der Tastatur nicht, während das Gleiche wie ein Piped-Zeichen einwandfrei funktioniert?
Haben Sie die Option '-CS' ausprobiert? ('perl -CS -we') um STDIN und STDOUT UTF-8 Kodierung zu verwenden –
Ich habe versucht perl -CS -we - das funktioniert perfekt für den Ausdruck auf STDOUT, aber aus irgendeinem Grund hat es keine Wirkung auf STDIN (Das heißt: Ich habe immer noch genau das gleiche Problem - nicht initialisierter Wert) – user2288349
'CHCP 65001' utf-8 Unterstützung in cmd ist fadenscheinig, wenn es mit externen Anwendungen wie' perl' verwendet wird. Das ist, wo Wrapper wie ConEmu praktisch sind. – wOxxOm