Thread Frage zu Password und Kodierung
(8 answers)
Opened by Kuerbis at 2013-01-15 20:33
Das eine mal ist es ein perl-Zeichenformat-kodierter String das andere mal ein Binärer String.
Bei <> läuft der Passwortstring durch perls Stringkonvertierung terminal(UTF-8) => decoding => perl(interne Kodierung). Bei libterminal passiert das nicht, da Perls IO Layer umgangen werden (C-Code nimmt keine Rücksicht auf Perl). termial(UTF-8) => term_readline_lib(binary string) => perl(binary string) Bei der Ausgabe wird die Perlkodierung in das Termial-Format konvertiert und die Ausgabe ist korrekt. Das andere mal rührt perl die Ausgabe nicht an (Binary Strings können irgend was sein, also wird es als Bytes behandelt). Das Terminal versucht daraus etwas zu machen. Das Resultat ist die "doppelt" kodierte Ausgabe. Bei DBI passiert etwas ähnliches. Einmal wird konvertiert das andere mal nicht. Das Ergebnis dort bleibt aber das selbe, nämlich ein UTF-8 binär String, der an die DB übergeben wird. Es ist fast immer sinnvoll Zeichen Strings in das perl internen Format zu konvertieren, denn es kann sein das nicht immer UTF-8 aus dem Terminal kommt, oder das Ziel UTF-8 nicht versteht. Dazu solltest du die aktuelle Terminal-Kodierung abfragen und benutzen. Die steht in $ENV{LANG} oder $ENV{LC_ALL} oder $ENV{LANGUAGE} |