以下脚本被编码以UTF-8:为什么在用“使用utf8”的UTF-8编码的Perl脚本中不能识别变音符号?
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
荷兰国际集团utf8
,我期待的脚本来代替für
可变$fuer
- 但事实并非如此。
但是,如果我删除了use utf8
。这与我认为use utf8
的目的相反:表示脚本以UTF-8编码。
感谢您的回答 - 这是第一次,我相信(希望...),我才明白'使用utf8'的东西。另外,我并不知道Perl具有字符边界的概念。我总是认为一个字符串只是(而且只是)一个字节数组。因此我的困惑。 –