Schrift
[thread]6449[/thread]

use MIME::WordDecoder;: =?utf-8?Q?Annerose_H=C3=BCmbert?= (Seite 2)



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
esskar
 2004-08-31 13:52
#85214 #85214
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
nochmal ich:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
sub keep_7bit
{
local $_ = shift;
tr/\x00-\x7F/#/c;
$_;
}

sub decode_qp
{
my $res = shift;
$res =~ s/\r\n/\n/g; # normalize newlines
$res =~ s/[ \t]+\n/\n/g; # rule #3 (trailing space must be deleted)
$res =~ s/=\n//g; # rule #5 (soft line breaks)
if (ord('A') == 193) { # EBCDIC style machine
if (ord('[') == 173) {
$res =~ s/=([\da-fA-F]{2})/Encode::encode('cp1047',Encode::decode('iso-8859-1',pack("C", hex($1))))/ge;
}
elsif (ord('[') == 187) {
$res =~ s/=([\da-fA-F]{2})/Encode::encode('posix-bc',Encode::decode('iso-8859-1',pack("C", hex($1))))/ge;
}
elsif (ord('[') == 186) {
$res =~ s/=([\da-fA-F]{2})/Encode::encode('cp37',Encode::decode('iso-8859-1',pack("C", hex($1))))/ge;
}
}
else { # ASCII style machine
$res =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge;
}
$res;
}

sub decode_words
{
my $value = shift || "";
my $wd = default MIME::WordDecoder;

eval "require Encode; $value = Encode::decode('MIME-Header', $value)";

$wd->handler("BIG5" => "KEEP");

$wd->handler("WINDOWS-1250" => "KEEP");
$wd->handler("WINDOWS-1251" => "KEEP");
$wd->handler("WINDOWS-1252" => "KEEP");
$wd->handler("WINDOWS-1253" => "KEEP");
$wd->handler("WINDOWS-1254" => "KEEP");
$wd->handler("WINDOWS-1255" => "KEEP");
$wd->handler("WINDOWS-1256" => "KEEP");
$wd->handler("WINDOWS-1257" => "KEEP");
$wd->handler("WINDOWS-1258" => "KEEP");
$wd->handler("ISO-8859-1" => \&decode_qp);
$wd->handler("ISO-8859-2" => \&decode_qp);

my $retval = $value ? $wd->decode($value) : "";

return ($retval == 1 ? $value : $retval);
}


rufe jetzt decode_words auf:

Code: (dl )
decode_words('=?iso-8859-1?Q?1=261_Internet_AG_=2D_Ihre_Rechnung_105232829_vom_22.08.2004?=')


ich bekomme dann den original-codierten String zurück
anstatt \&decode_qp hab ich auch \&keep_7bit probiert; und hab auch die zeilen
Code: (dl )
1
2
$wd->handler("ISO-8859-1" => \&decode_qp);
$wd->handler("ISO-8859-2" => \&decode_qp);

zuerst ganz weggelassen gehabt... irgendwas scheint an diesem encoding nicht zu stimmen nicht zu stimmen; ich seh es leider nicht; andere ISO's funzen;
z.b.
Code: (dl )
decode_words('=?iso-8859-1?Q Rechnungsstelle_1=261_Internet_AG?= <rechnungsstelle@einsundeins.com>');
esskar
 2004-08-31 14:21
#85215 #85215
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
fixed

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
sub decode_words
{
    my $value = shift || "";
    my $wd = default MIME::WordDecoder;
            
    eval "require Encode; $value = Encode::decode('MIME-Header', $value)";        

    $wd->handler("BIG5" => "KEEP");

    $wd->handler("WINDOWS-1250" => "KEEP");
    $wd->handler("WINDOWS-1251" => "KEEP");
    $wd->handler("WINDOWS-1252" => "KEEP");
    $wd->handler("WINDOWS-1253" => "KEEP");
    $wd->handler("WINDOWS-1254" => "KEEP");
    $wd->handler("WINDOWS-1255" => "KEEP");
    $wd->handler("WINDOWS-1256" => "KEEP");
    $wd->handler("WINDOWS-1257" => "KEEP");
    $wd->handler("WINDOWS-1258" => "KEEP");    

    my $retval = $value ? $wd->decode($value) : "";
    
    $retval =~ s!\r\n!\n!g;
    $retval =~ s!\n[ \t]+!\n!g;
    $retval =~ s!\r?\n!!g;    

    return ("$retval" eq "1" ? $value : $retval);
}


ausschlaggebend war wohl
Code: (dl )
$retval == 1


ist jetzt!

Code: (dl )
"$retval" eq "1"


obwohl das immer noch nicht korrect ist!\n\n

<!--EDIT|esskar|1093947829-->
ptk
 2004-08-31 14:22
#85216 #85216
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Code: (dl )
1
2
my $retval = $value ? $wd->decode($value) : "";
return ($retval == 1 ? $value : $retval);


Das hier sieht nicht richtig aus. decode() scheint den String zurueckzugeben und nicht 1 oder 0. Zu allem Ueberfluss faengt der konvertierte String mit "1" an ("1 & 1 ..."), so dass bei der impliziten Konversion von String nach Zahl $retval auch als 1 interpretiert wird...
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2004-08-02 19:52.