Thread Zeichensatzproblem mit Š (15 answers)
Opened by bianca at 2019-06-07 19:07

rosti
 2019-06-08 11:57
#190109 #190109
User since
2011-03-19
3194 Artikel
BenutzerIn
[Homepage]
user image
Wenn Du mit der Kodierung arbeiten willst (RegEx, Stringfunktionen usw.), musst Du sie einschalten. Das ist nicht nur in Perl so, sondern in jedem Programm was Texte verarbeitet. Außerhalb, also in Dateien oder Datenbanken oder beim Transport über HTTP gibt es keine Kodierung bzw. ist die Kodierung auszuschalten.

Wir sagen zwar daß eine Datei UTF-8-kodiert ist, aber in Wirklichkeit weiß das die Datei gar nicht. Denn Dateien sind nur Bytesequenzen und die kennen gar keine Kodierung. Ebenso speichern Datenbanken nur Bytesequenzen und ebenso transportiert HTTP nur Bytesequenzen.

Die Kodierung ist also nur eine Vereinbarung über die Transportstrecke hinweg. Mit meinem Code hab ich Dir gezeigt, wie eine RegEx /i nach dem Einschalten der Kodierung funktioniert. Sofern die Kodierung ausgeschaltet ist, funktioniert /i natürlich nicht. Mit meinem Code kannst Du das akkurat nachvollziehen, aber es kommt mehr auf das Verstehen an.

Kopiere den Code, speichere die Datei in ANSI und melde Ergebnis. Und noch etwas: Perl unterscheidet seit v5.6 zwischen Bytesequenzen und kodierten Zeichenketten. Das Modul Encode ist seit v5.8 im Core.


MFG

PS: Wenn die Scriptdatei in utf-8-kodiert ist

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
use utf8;
# Datei in UTF-8
my $name  = 'Šantl';
my $vname = 'Gašper';

$, = "\n";
print 
    $vname =~ /Š/i, # 1
    $name =~ /š/i;  # 1



Und Korrektur betr. ISO:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use Encode;
# Scriptdatei in ANSI, cp1250
my $name  = 'Šantl';
my $vname = 'Gašper';
# Zeichenkodierung einschalten
$vname = decode('cp1250', $vname);
$name  = decode('cp1250', $name);
my $upper = decode('cp1250', 'Š');
my $lower = decode('cp1250', 'š');
$, = "\n";

print 
    $vname =~ /$upper/i,
    $name  =~ /$lower/i

Last edited: 2019-06-08 12:44:41 +0200 (CEST)

View full thread Zeichensatzproblem mit Š