Следующий сценарий кодируется в UTF-8:Почему umlaut не распознается в кодировке Perl с кодировкой UTF-8 с использованием «utf8»?
use utf8;
$fuer = pack('H*', '66c3bc72');
$fuer =~ s/ü/!!!/;
print $fuer;
ü
в s///
хранятся в сценарии, как c3 bc
, как следующий дамп показывает xxd
шестигранных.
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
является представление UTF-8 для ü
.
Поскольку сценарий кодируется в UTF-8, и я use
ING utf8
, я ожидал, что сценарий для замены für
в переменной $fuer
- но это не делает.
Это, однако, если я удалю use utf8
. Это противоречит тому, что я думал use utf8
: для указания того, что сценарий закодирован в UTF-8.
Спасибо за ответ - Это первый раз, я считаю, (надеюсь ...), что я понимаю, 'use utf8'.Кроме того, я не знал, что Perl имеет концепцию границ символов. Я всегда думал, что строка - это просто (и только) массив байтов. Отсюда моя путаница. –