zoukankan      html  css  js  c++  java
  • use utf8 gives me 'Wide character in print'

    use utf8 gives me 'Wide character in print'
    
    如果我运行下面的程序  
    
    [oracle@oadb utf-8]$ perl -e 'use utf8; print "鸡
    ";print length("鸡
    ")."
    "'
    Wide character in print at -e line 1.
    鸡
    2
    
    我得到这个警告:
    
    Wide character in print at -e line 1.
    
    如果我运行 这个程序:
    
    [oracle@oadb utf-8]$ perl -e ' print "鸡
    ";print length("鸡
    ")."
    "'
    鸡
    4
    
    我不会得到警告:
    
    
    我认为 use utf8 是需要使用utf8 字符在一个Perl脚本,为什么这个不起作为 我该如何解决
    
    
    没有use utf8 解释你的脚本作为一个单字节字符顺序,那么这里有4个字节在你的字符串里
    
    [oracle@oadb utf-8]$ perl -E 'say join ":", map { ord } split //, "鸡
    ";'
    233:184:161:10
    
    前3个字节组成了你的字符(鸡),最后一个是换行符
    
    
    这个调用打印发送那些4个字符到STDOUT, 你的控制台然后
    
    制定如何显示那些字符。如果你的控制台设置为UTF-8,那么它会解释那3个字节作为一个单独的字符
    
    
    如果 你增加use utf8,事情就不同了, 在这种情况下,Perl解释你的字符串作为2个字符
    
    
    [oracle@oadb utf-8]$  perl -Mutf8 -E 'say join ":", map { ord } split //, "鸡
    ";'
    40481:10
    
    
    默认情况下,Perl的 IO layer 假设 它是和单字节字符一起工作。
    
    因此当你尝试打印一个多字节的字符, Perl 想 这里有什么错误 给你一定警告
    
    (S utf8)  Perl 遇到一个宽字符(>255) 当他没有想到的。
    
    这个警告是默认启用用于I/O(像print)
    
    
    最简单的方式减轻这个警告是简单的增加 utf8 layer 到输出
    
    例如 binmode STDOUT, ':utf8'. 
    
    另外一个方式是关闭警告 增加  no warnings 'utf8';

  • 相关阅读:
    .net经典笔试题
    asp.net面试题
    Java 面 试 题
    .net面试题集
    J2EE面试题集锦
    linux下查看硬件信息
    linux下软件的安装[转]
    在Linux系统下优化Oracle具体步骤
    制作Linux的优盘启动盘
    两端对齐,图片文字列表
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349825.html
Copyright © 2011-2022 走看看