免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3826 | 回复: 3
打印 上一主题 下一主题

length 中文? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-11 23:31 |只看该作者 |倒序浏览
$ perl -e 'print length "很好很强大", "\n"'
15


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

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


  1. #!/usr/bin/perl

  2. $a="henhao";
  3. $b="很好";

  4. printf "%-10s%-10s\n", $a,$a;
  5. printf "%-10s%-10s\n", "z",$b;
  6. printf "%-10s%-10s\n", $b,$a;
  7. $   
  8. $
  9. $ perl b.pl
  10. henhao    henhao   
  11. z            很好   
  12. 很好    henhao  #这里没对齐
复制代码

论坛徽章:
0
2 [报告]
发表于 2007-10-11 23:50 |只看该作者
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 辅助平面的字符使用四字节编码。

[ 本帖最后由 Lonki 于 2007-10-12 00:07 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-10-12 14:17 |只看该作者
那该如何打印这样中英文很合的格式呢?

论坛徽章:
0
4 [报告]
发表于 2007-10-12 14:29 |只看该作者
你的平台上换成相应的default locale

use Encode;

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

[ 本帖最后由 Lonki 于 2007-10-12 14:33 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP