length 中文?

length 中文?

$ perl -e 'print length "很好很强大", "\n"'
15


怎么是一个字占了3字节?

printf %10s  遇到中英文混合的时候就乱套了

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl

$a="henhao";
$b="很好";

printf "%-10s%-10s\n", $a,$a;
printf "%-10s%-10s\n", "z",$b;
printf "%-10s%-10s\n", $b,$a;
$   
$
$ perl b.pl
henhao    henhao   
z            很好   
很好    henhao  #这里没对齐

Locale是zh_cn.utf-8是吧?

刚在Solaris (Locale zh_CN.GBK) & Win 上测perl -e 'print length "很好很强大", "\n"'
结果都是10

Locale zh_CN.UTF-8 结果就是15

因为UTF-8是1字节到4字节编码, 汉字基本上在3字节.


wikipedia:
UTF-8 使用一至四个字节为每个字符编码。128 个 ASCII 字符(Unicode 范围由 U+0000 至 U+007F)只需一个字节,带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及马尔代夫语(Unicode 范围由 U+0080 至 U+07FF)需要二个字节,其他基本多文种平面(BMP)中的字符使用三个字节,其他 Unicode 辅助平面的字符使用四字节编码。

那该如何打印这样中英文很合的格式呢?
你的平台上换成相应的default locale

use Encode;

print length decode('gbk', '很圆很柔软');