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-02 16:29
#167902 #167902
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
falls du es noch nicht gelesen hast, hier ein netter artikel zu charsets:
http://perlgeek.de/de/artikel/charsets-unicode

ich vermute, dass mindestens einer der beiden strings (der zu vergleichende oder die regex) nicht dekodiert ist.

hier eine demonstration:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ perl -wE'
my $s = "Ö";
my $regex = "ö";
say 1 if $s =~ m/$regex/i'
$ perl -wE'
use utf8; # strings direkt im skript werden automatisch dekodiert
my $s = "Ö";
my $regex = "ö";
say 1 if $s =~ m/$regex/i'
1
$ perl -wE'
use Encode; # manuelles dekodieren von variablen
my $s = decode_utf8 "Ö";
my $regex = decode_utf8 "ö";
say 1 if $s =~ m/$regex/i'
1

wenn der string nicht dekodiert ist, ist das für perl nur eine folge von bytes, und das aus 2 bytes bestehende ö wird nicht als einzelner character erkannt.

zum debugging:
Code (perl): (dl )
1
2
3
use Devel::Peek;
Dump $durchsuchen;
Dummp $suchtext;


dann solltest du genau sehen, was dekodiert ist und was nicht
Last edited: 2013-06-02 16:31:28 +0200 (CEST)
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