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 13:29
#167973 #167973
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
deine kommentare deuten darauf hin, dass du das mit dem utf8 noch nicht gänzlich verstanden hast. den verlinkten artikel zu charsets hast du gelesen?
2013-06-04T10:57:45 technix
Code (perl): (dl )
1
2
3
use utf-8;
# zwingend erforderlich, in utf-8 zu scripten allein 
# ist zuwenig.


das modul ("pragma") heisst utf8, nicht utf-8.
und es ist nicht zwingend erforderlich.
es ist, wie schon erwähnt wurde, nur dann erforderlich, wenn du utf-8 direkt im skript hast.
bitte frag nach, wenn das unklar ist. hast du ein skript, in dem keinerlei umlaute oder sonstiges vorkommen und bei dem die daten mit umlauten nur aus dateien oder parametern kommen, brauchst du kein "use utf8"!
du machst alles mit Encode.


Quote
Code (perl): (dl )
1
2
3
4
5
use Encode qw(encode decode); $enc = 'utf-8';
$in{'suchmich'} = decode($enc, $in{'suchmich'});
#
# decodieren aller relevanten von 'außen' übergebenen
# Variablen, da perl intern utf-8 leider nicht versteht


es ist nicht so, dass "perl intern utf-8 leider nicht versteht".
wie schon erwähnt, von aussem kommen bytes. ein umlaut ist dann z.b. in 2 aufeinanderfolgenden bytes kodiert. die sind dann einfach zusammenhanglos. du musst perl das ganze erst dekodieren lassen, damit die 2 bytes als ein zusammenhängener character verstanden werden. du musst perl also zuerst mitteilen: hier kommt utf-8.
für die ausgabe gehst du dann wieder den umgekehrten weg.


Quote
Code (perl): (dl )
1
2
3
4
open my $fh, "<:encoding(UTF-8)", $infile
#
# einlesen externer Textdaten als utf-8, auch wenn diese
# schon utf-8 sind


auch hier: die daten werden nicht als utf-8 eingelesen, *obwohl* sie schon utf-8 sind.
die datei besteht einfach nur aus einzelnen bytes. keiner weiss, dass die bytes zusammen utf-8 ergeben sollen, das sagst du perl als programmierer.
dein kommentar klingt, als müsstest du was doppelt machen.
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