在 perl 里什么是 ‘wide character'

Unicode

Unicode 是一个字符集, 用来存储很多字符的一个空间。 一个 character 的序号值被叫做 code point。

计算机以 byte 为单位, 一个 byte 最多表示 256 个 character。

Unicode 有好几种编码方式, 其中 UTF-8 是最常见的。 Unicode 的编码方式是用多个连续的 byte 来存储一个 code point, 通俗的说就是: character。

UTF-8

UTF-8 是一种 Unicode 的编码方式。

UTF-8 对前 128 个code point, 也就是0-127, 处理方式和 ASCII 一样, 一个 byte 存储一个 character。 其他的 characters 用两个或多个 bytes 来存储。

Text strings (character strings)

Text strings 也叫 character strings 或者 Unicode strings, 由 characters 组成。

Binary strings (byte strings)

Binary strings, 或叫 byte strings 由 bytes 组成。

Encoding

Encoding 是从 text 到 binary 的转换。

Decoding

Decoding 是从 binary 到 text 的转换。

Internal format

Perl 有一个 internal format, 是一种 encoding, 用来 encode text strings 以便他们存储在内存里。

Wide character

这个短语用在一个字符的序号值大于 127, 或大于 255, 或任何字符占领的空间超过一个 byte, 和上下文有关。

在 Perl 里, "Wide character in ..." 是由于一个字符的序号值大于 255。 如果没有指定 encoding 层, Perl 会尝试 ISO-8859-1 的 encoding, 如果不行, 便会发出这个 warning, 并且使用 UTF-8 的encoding 输出。

为了避免这个警告, 可以精确的指定 encoding, 例如:

binmode STDOUT, ":encoding(UTF-8)";

参考:

  • perldoc PerlIO

  • perldoc perlrun

  • perldoc perlunitut

  • perldoc perlunifaq


Perl

这篇文章: 有用 无用
创建 2012-12-06 20:38:20 / 更新 2016-11-23 02:20:54