Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11458[/thread]

Zeichen (de)codieren?



<< >> 7 Einträge, 1 Seite
Gast Gast
 2008-03-12 22:29
#106989 #106989
Hi,

ich empfange mittels LWP::UserAgent eine website. Wenn ich diese am Bildschirm ausgebe wird z.B. das € Zeichen kryptisch dargestellt.
Allerdings liegt das nicht an meiner Konsole, denn wen ich in dem script direkt print "€"; mache erscheint auch ein "richtiges" € zeichen.

Googeln hat mich nun soweit gebracht, dass man wohl use Encode; verwenden soll. Allerdings habe ich damit keinen Erfolg.

Wenn ich print decode('utf-8', $string); mache ist das €-Zeichen weiterhin kryptisch.
Versuch ichs mit print encode('utf-8', $string); verschwindet das € zeichen und an der stelle erscheint ein leerzeichen.

Ich kann mir nicht erklären warum das nicht geht, geschweigedem wo überhaupt das problem liegt. Wieso codiert denn das eine perl modul die schrift anders als ein anderes?
moritz
 2008-03-13 09:56
#106994 #106994
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
LWP::UserAgent lässt, wenn ich mich richtig erinnere, den String in der kodierung, die die Webseite verwendete.

Wenn die Webseite den richtigen Charset im Content-Type header angibt, sollte die Methode decoded_content im Modul HTTP::Response für dich das richtige sein.

Vorher solltest du noch ein
Code (perl): (dl )
binmode STDOUT, ':encoding(UTF-8)';

machen, dann solltest du den Inhalt richtig darstellen können.

<werbung>
Für mehr Informationen empfehle ich dir ein Blog-Eintrag von mir zu dem Thema Charsets
</werbung>
ptk
 2008-03-14 01:17
#107018 #107018
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Vielleicht hilft zusätzlich zum binmode die Verwendung von decoded_content statt content?
Gast Gast
 2008-03-14 21:37
#107073 #107073
Hi,

ich habe weiterhin große schwierigkeiten das ganze umzusetzen, auch wenn der blog eintrag mal immerhin zum verständnis um die problematik beigetragen hat.

Bei weiteren suchen habe ich unter anderem diesen codeausschnitt gefunden:

Code: (dl )
1
2
3
4
5
6
7
my $content = $response->content;
my $encoding = "utf8"; # assume this is the default
if($content =~ /encoding="([^"]+)"/) {
$encoding = $1;
}
$content = $response->decoded_content((charset => $encoding));
print $content;


Allerdings funktioniert das nicht. Ich bekomme dann garkeine ausgabe mehr. Ich verstehe auch nicht wie die verwendete codierung ermittelt werden soll. Steht die in $response->content; wirklich drin?
ptk
 2008-03-14 22:12
#107075 #107075
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Das oben sieht wie Unsinn aus. Oder jemand versucht, eine kaputte Antwort eines Server zu reparieren. Normaleweise müsste man nur
Code: (dl )
$response->decoded_content;
schreiben.
Gast Gast
 2008-03-14 22:48
#107077 #107077
Wenn ich das mache verschwindet das euro zeichen ganz und an dessen stelle ist ein leerzeichen.

Im Quelltext der website steht das eurozeichen übrigens direkt da (€), und kein &euro;
ptk
 2008-03-15 01:06
#107080 #107080
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Bist du sicher, dass die Website das Encoding richtig spezifiziert hat? Oft sieht man, dass die Seiten in Windows-1251 (oder 1250? oder 1252? Ich bringe die immer durcheinander) encodiert sind, aber iso-8859-1 spezifiziert ist. Und an der Stelle 0x80 ist bei iso-8859-1 einfach kein Zeichen.
<< >> 7 Einträge, 1 Seite



View all threads created 2008-03-12 22:29.