skryptu jest zakodowane w UTF-8Dlaczego umlaut nie jest rozpoznawany w skrypcie UTL-8 zakodowanym w Perlu za pomocą "use utf8"?
use utf8;
$fuer = pack('H*', '66c3bc72');
$fuer =~ s/ü/!!!/;
print $fuer;
ü
w s///
jest przechowywany w skrypcie jako c3 bc
, jak wynika z poniższego zrzutu xxd
sześciokątnych.
0000000: 75 73 65 20 75 74 66 38 3b 0a 0a 24 66 75 65 72 use utf8;..$fuer
0000010: 20 3d 20 70 61 63 6b 28 27 48 2a 27 2c 20 27 36 = pack('H*', '6
0000020: 36 63 33 62 63 37 32 27 29 3b 0a 0a 24 66 75 65 6c3bc72');..$fue
0000030: 72 20 3d 7e 20 73 2f c3 bc 2f 21 21 21 2f 3b 0a r =~ s/../!!!/;.
0000040: 0a 70 72 69 6e 74 20 24 66 75 65 72 3b 0a .print $fuer;.
c3 bc
jest reprezentacją UTF-8 ü
.
Ponieważ skrypt jest kodowana w UTF-8 i jestem use
ing utf8
, spodziewałem skrypt zastąpić für
w zmiennej $fuer
- jeszcze nie.
Ma to jednak miejsce w przypadku usunięcia use utf8
. To działa wbrew temu, co moim zdaniem było use utf8
: wskazać, że skrypt jest zakodowany w UTF-8.
Dzięki za odpowiedź - Jest to pierwszy raz, wierzę (mam nadzieję ...), że rozumiem rzecz 'use utf8'.Nie wiedziałem też, że Perl ma pojęcie granic postaci. Zawsze myślałem, że ciąg jest po prostu (i tylko) tablicą bajtów. Stąd moje zamieszanie. –