8

我想知道下面这句话对我们这些傻瓜简单来说意味着什么?

什么是字节序列?一个字节有多少个字符?

iconv_strlen() counts the occurrences of characters in the given byte sequence str on the basis of the specified character set, the result of which is not necessarily identical to the length of the string in byte.

4

4 回答 4

12

让我们以日语字符“こ”为例。假设 UTF-8 编码,这是一个 3 字节字符(0xE3 0x81 0x93)。让我们看看当我们strlen改为使用时会发生什么:

$ php -r 'echo strlen("こ") . "\n";'
3

结果是 3,因为strlen是计数字节。但是,根据 UTF-8 编码,这只是单个字符。这就是iconv_strlen进来的地方。它知道在 UTF-8 中,这是单个字符,即使它由 3 个字节组成。因此,如果我们尝试这样做:

$ php -r 'echo iconv_strlen("こ", "UTF-8") . "\n";'
1

我们得到 1。这就是该解释要指出的内容。

于 2011-05-22T04:41:13.240 回答
1

字符串具有特定的字节长度。当且仅当字符串中的每个字符都由单个字节表示时,该字符串中的字符数将等于字节数。例如,对于英文字母,情况就是如此。对于使用多于一个字节来表示部分或全部字符的表示(即编码),字符数将小于字节数*。例如,不可能用一个字节来表示所有可能的汉字。

所以,iconv_strlen,给定一个编码,将尝试计算字符串中的字符数。字节序列是字符串中字节的顺序。对于包含中文的字符串,使用 UTF8 编码,例如,您可能有一个包含 14 个字符的 20 字节字符串。

*如果一个字符由少于一个字节表示,它可能会更多。

于 2011-05-22T04:44:36.597 回答
0

iconv_strlen()根据指定的字符集计算给定字节序列中字符的出现次数,str其结果不一定与字符串的字节长度相同。

翻译:

  • byte sequence: string的另一个词,它是一个字节序列(1 字节 = 8 位),例如:01011010 00011001 01101011. 字节序列表示字符,如,A等。BC
  • character set:又名encoding,指定一个字节如何映射到一个字符;例如在ASCII 字符集中01000001表示。A
  • not necessarily identical to the length […] in byte: 在 ASCII 字符集中,一个字节正好代表一个字符。并非所有字符集都是如此。在某些情况下,使用两个、三个或更多字节来表示一个字符。这是因为一个字节只能容纳 256 个不同的值,而某些语言使用超过 256 个字符(如中文和日文)编写。Unicode 甚至尝试将所有人类语言的所有字符映射到一个字符集中,这需要每个字符多于一个字节。

总之:

iconv_strlen()计算给定字符串中的字符,同时考虑字符集。因此,字符数可能不等于字节数。

于 2011-05-22T05:47:01.770 回答