Thread mein script verweigert ignore_case in utf-8 pattern matching (23 answers)
Opened by technix at 2013-06-02 16:19

pq
 2013-06-04 22:56
#167998 #167998
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
CPAN:Encode ist ein perl-modul, das ab 5.8 mitgeliefert wird.
die doku kannst du auch lokal mit perldoc Encode aufrufen.

hier mal zur veranschaulichung von bytes und chars (kommentare von mir):
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
perl -wE'
use Encode;
use Devel::Peek;
my $bytes = "ä ö ü";
my $chars = decode_utf8("ä ö ü");
my $latin1 = encode(latin1 => $chars);
Dump $bytes;
Dump $chars;
Dump $latin1;
'
# $bytes
SV = PV(0x850b78) at 0x86fc20
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
PV = 0x86a4e0 "\303\244 \303\266 \303\274"\0
CUR = 8
LEN = 16

# $chars
SV = PV(0x851228) at 0x86fc68
REFCNT = 1
FLAGS = (PADMY,POK,pPOK,UTF8)
PV = 0x8a9d00 "\303\244 \303\266 \303\274"\0 [UTF8 "\x{e4} \x{f6} \x{fc}"]
CUR = 8
LEN = 16

# $latin1
SV = PV(0x8514e8) at 0x86fc08
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
PV = 0x94e9b0 "\344 \366 \374"\0
CUR = 5
LEN = 8

ich arbeite in einem utf8-terminal.
output nummer 1:
in $bytes steht \303\244 für das ä - 2 bytes, die als utf8 dekodiert einen zusammenhängenden character bilden würden.
output nummer 2:
das siehst du in $chars. Devel::Peek zeigt dir zur veranschaulichung [UTF8 "\x{e4} \x{f6} \x{fc}"].
output nummer 3:
in latin1 besteht ein ä aus einem byte \344

binmode STDOUT, ... ist nur eine alternative zu $output = encode_utf8($output) und praktisch, wenn man mehrere sachen ausgeben will und nicht den gesamten output in einer variable hat.

steht aber auch in http://perlgeek.de/de/artikel/charsets-unicode
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread mein script verweigert ignore_case in utf-8 pattern matching