两个字符串连接输出乱码问题解决
发布时间:2020-12-15 23:39:00 所属栏目:大数据 来源:网络整理
导读:在perl语言中,perl字符串格式包含两部分内容,一个是数据区,一个是utf8 flag标志位。 当utf8 flag是on时,数据区内容是以utf8编码格式去解读。 当utf8 flag是off时,数据区内容是以一个字节一个字节去解读。 当两个字符串相连接时,需要保证两个字符串都具
在perl语言中,perl字符串格式包含两部分内容,一个是数据区,一个是utf8 flag标志位。 当两个字符串相连接时,需要保证两个字符串都具有相同的格式,否则可以到处最终输出乱码,举例如下: 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:perlslide1.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,"nnnn";
print $merger_string02,"nnnn";
print $merger_string03,"nnnn";
执行命令: perl test.pl > log.txt
运行结果: hello,中国../slideLayouts/slideLayout1?? ?¥? ??-???.xml
hello,中国../slideLayouts/slideLayout1你好 中国.xml
hello,中国../slideLayouts/slideLayout1你好 中国.xml
之所以会有不同的输出结果,就是因为相连接的两个字符串内部格式有差异,解决方法就是使相加的两个字符串拥有相同的格式即可。 更多资料:http://www.voidcn.com/article/p-oppjzsvy-brn.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |