Thread Frage zu Password und Kodierung (8 answers)
Opened by Kuerbis at 2013-01-15 20:33

topeg
 2013-01-16 12:56
#164977 #164977
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Bei <> kommt ein Perl-kodierter (UTF-8) String. Das kannst du mit Encode::is_utf8 prüfen.
Bei read_password hast du ein UTF-8 kodierten Binärstring. (da müsstest du mit Encode::encode('UTF-8', $string) die Konvertierung selbst machen)
Bei $term->readline hast du einen ISO-8859-1 kodierten Binärstring. (da müsstest du mit Encode::encode('ISO-8859-1', $string) die Konvertierung selbst machen)

Terminal und Shell dürften als Zeichenkodierung ISO-8859-1 haben.

Eingaben erfolgen über die Shell, welche das Terminal zur Ausgabe benutzt. Gelesen wird von der Tastatur. Dafür wird vom System ein Virtuelles Taststurhandle erzeugt, das von der Shell benutzt wird. Die Shell hat in deinem Fall eine ISO-8859-1 Kodierung.
Wenn du also ein Zeichen in die Tastatur eingibst, wir das Zeichen von der Handware als Scancode an den Kernel übergeben, der macht daraus ein kodiertes Zeichen (das ist ein normierter Scancode) und sendet es an das virtuelle Tastaturhandle weiter, die Shell ließt daraus und wandelt das Zeichen in seine interne Kodierung und gibt es weiter an das darin laufende Programm.

read_password greift direkt auf das Virtuelle Handle zu und wandelt den Scancode in UTF-8. Dieser UTF-8 Binärstring landet in perl. Im Terminal ist ISO-8859-1 als Ausgabe-Kodierung eingestellt. Der Binärstring wird ohne Wandlung durch perl an das Terminal gesendet und als ISO-8859-1 dargestellt. Die folge ist eine kaputte Kodierung.

$term->readline bekommt die Daten von der Shell und die sind ISO-8859-1 kodiert. Das landet so auch in Perl als Binärstring. Bei der Ausgabe fasst perl den Binärstring nicht an und dieser wird vom Terminal korrekt als ISO-8859-1 dargestellt.

Bei <> wird der Einkommende ISO-8859-1 String erst in UTF-8 gewandelt und dann in das interne Perlformat (utf8 Flag wird gesetzt). Bei der Ausgabe läuft es umgekehrt die Ausgabe ist korrekt.

View full thread Frage zu Password und Kodierung