以前用 Perl 处理 UTF-8 编码的 XML 文件时,总是遇到奇怪的问题:
单独输出读取的中文 XML 信息,没有问题,但是一旦和其他中文字符(比如定义的中文变量)混合输出就会出现乱码
eg:
$xml->{"chunk"}{"comment"} 包含了中文信息
my $cnstr="变量中的中文信息";
## 出现乱码
print $xml->{"chunk"}{"comment"} . $cnstr ;
## 正常
print $xml->{"chunk"}{"comment"};
print $cnstr;
仔细研究了下
UTF8 下中文处理 [转载] 和 ,现在总算找到原因了:
UTF-8 编码的 XML 文件默认就含有 utf8 标记,而一般自定义的变量不含,两者混合输出时,Perl 会认为两者都不含或都含(看谁在前) utf8 标记,于是乱码就产生了。
解决办法:
读取 XML 文件后,用 Encode::_utf8_off($str) 来去掉 utf8 标记
写入 XML 文件前,用 Encode::_uft8_on($str) 加上 utf8 标记
如:
### 读取
$comment = $xml->{"chunk"}{"comment"};
Encode::_utf8_off($comment);
...
### 写入
$comment= param('comment'); ## 获取网页提交的信息
Encode::_utf8_on($comment);
$xml->{"chunk"}{"comment"} = $comment;
....
阅读(3122) | 评论(0) | 转发(0) |