Hallo,
es ist wohl schon zu spät, ich krieg die Ausgabe irgendwie nicht hin. Die Zeichen sind aus einer UTF8 Website, ich habe die also im String und will die in Latin1 konvertieren. Funktionier irgenwie nicht - hat jemand eine Idee?
use Encode;
use warnings;
binmode(STDOUT, ":encoding(cp437)");
$a="%C3%9F";
$a = encode("iso-8859-1", $a);
print $a."\n";
$a="%C3%9F";
$a= encode("iso-8859-1", decode("utf8", $a));
print $a."\n";
User since
2003-11-28
3645
Artikel
ModeratorIn
Du bekommst Zeichen aus einer externen Quelle. Externe Quellen liefern immer "bytes" oder "octets", die du nach "characters" konvertieren willst. Schau in der Encode-Manpage nach, welche von den beiden Methoden encode/decode von octets nach characters umwandelt (ich kann mir das nie merken, aber in allerneuesten Encode-Versionen gibt es bytes2str und str2bytes). Als Encoding gibst du dort das Encoding der externen Quelle, also in diesem Fall utf8 an.
Wenn du dein STDOUT bereits auf cp437 gesetzt hast, brauchst du nichst mehr weiter zu machen. Perl konvertiert dann für dich alles nach cp437, was nach STDOUT ausgegeben wird.
iso-8859-1 brauchst du hier gar nicht. Oder doch?\n\n
<!--EDIT|ptk|1173944259-->
User since
2006-07-12
31
Artikel
BenutzerIn
so geht's
binmode(STDOUT, ":encoding(cp437)");
use URI::Escape;
use Encode;
$str="%C3%B6";
$oct = uri_unescape($str);
$string = decode("utf-8", $oct);
print $string;
\n\n
<!--EDIT|Franz|1174051515-->
User since
2005-01-17
14748
Artikel
Admin1
"%C3%B6" ist aber kein Unicode sondern eine URL-Kodierung!
Wenn müsste es "\x{C3B6}" sein!
//EDIT: Aha, um 14:25 gemerkt ;)\n\n
<!--EDIT|GwenDragon|1174052393-->