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

在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,"\n\n\n\n";
print $merger_string02,"\n\n\n\n";
print $merger_string03,"\n\n\n\n";

执行命令:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值