• 两个字符串连接输出乱码问题解决


    在perl语言中,perl字符串格式包含两部分内容,一个是数据区,一个是utf8 flag标志位。

    当utf8 flag是on时,数据区内容是以utf8编码格式去解读。
    当utf8 flag是off时,数据区内容是以一个字节一个字节去解读。

    当两个字符串相连接时,需要保证两个字符串都具有相同的格式,否则可以到处最终输出乱码,举例如下:

    slide1.xml文件内容:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Relationships Target="../slideLayouts/slideLayout1你好 中国.xml" />

    示例代码:

    use Encode;
    use utf8;
    use XML::LibXML;
    
    my $filename = 'E:\perl\slide1.xml';
    #从文件中读取字符串
    my $dom = XML::LibXML->load_xml(location => $filename);
    
    my $target = "";
    if($dom =~ /Target="(.*?)"/){
        #target是slide1.xml中的内容,这个xml是utf8编码且utf8 flag 是off状态
        $target = $1;
    }
    
    #perl_format_src 是utf8编码,utf8 flag 是on状态
    my $perl_format_src = "hello, 中国";
    
    #两个字符串内部格式(编码+标志位)不一致,导致输出乱码
    my $merger_string01 = $perl_format_src.$target;
    
    #推荐使用方法一:
    #$target字符串转换为perl内部字符串格式,和$perl_format_src格式一致,输出正常
    my $merger_string02 = $perl_format_src.Encode::decode("utf8",$target);
    
    #方法二:
    #$perl_format_src字符串转换为utf8格式,且 utf8 flag是off 和$arget格式一致,输出正常
    my $merger_string03 = Encode::encode("utf8",$perl_format_src).$target;
    
    print $merger_string01,"
    
    
    
    ";
    print $merger_string02,"
    
    
    
    ";
    print $merger_string03,"
    
    
    
    ";

    执行命令:

    perl test.pl > log.txt

    运行结果:

    hello, 中国../slideLayouts/slideLayout1ä½ å¥½ 中国.xml
    
    hello, 中国../slideLayouts/slideLayout1你好 中国.xml
    
    hello, 中国../slideLayouts/slideLayout1你好 中国.xml
    

    之所以会有不同的输出结果,就是因为相连接的两个字符串内部格式有差异,解决方法就是使相加的两个字符串拥有相同的格式即可。

    更多资料:http://blog.csdn.net/c_base_jin/article/details/78879055

  • 相关阅读:
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    CSS日食与太阳碰撞
    5个最顶级jQuery图表类库插件-Charting plugin
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468176.html
Copyright © 2020-2023  润新知