Chinaunix首页 | 论坛 | 博客
  • 博客访问: 591971
  • 博文数量: 40
  • 博客积分: 7274
  • 博客等级: 少将
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-20 15:00
个人简介

Expired

文章分类
文章存档

2011年(1)

2008年(3)

2007年(17)

2006年(10)

2005年(9)

分类:

2007-01-21 11:44:08

以前用 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;
  ....

阅读(3071) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~