为什么在写入屏幕(编码问题)时会看到`á`而不是空格?

时间:2011-06-16 23:44:15

标签: php xml perl encoding

我完全迷失了编码问题,我不知道发生了什么,问题究竟是什么以及如何解决它。

基本上我只是尝试从Zip文件中读取HTML文件,解析它然后将片段输出到XML。现在,我从解析器中获取的文本发生了一些时髦的事情。

解析HTML时,只有当我写入屏幕时才会获得á而不是空格。如果我将它保存在变量中并写入文件,它在文件中看起来很好。然而,即使它在XML中看起来是正确的,但是我的PHP解析器无法解析该XML,IE似乎也不喜欢它。

我必须先mb_convert_encoding($xmlcontent, "ASCII");所以我可以在PHP中解析XML。

知道我的问题是什么吗?

  1. 使用Perl从.tar.gz文件中提取HTML

    my $tar = Archive::Tar->new;
    $tar->read("myfile.tar.gz");
    $tar->extract_file('index.html', 'output.html');
    
  2. 加载HTML,这就是它开始变得时髦的地方,我的输出就像Numberáofásourceálines

    my $tree = HTML::TreeBuilder->new;
    $tree->parse_file('output.html') or die $!;
    $tree->elementify;
    
  3. 写入XML

    my $output = new IO::File(">output.xml");
    my $writer = new XML::Writer(OUTPUT => $output, DATA_MODE => 1,DATA_INDENT => 2);
    

2 个答案:

答案 0 :(得分:1)

如果将其写入文件时看起来正确并且在将其写入终端时出错,则听起来您的终端期望编码错误。检查终端设置。'

另外,请参阅Jon Rockway对"Why does modern Perl avoid UTF-8 by default?"的回答。使用编码,您必须将输入转换为正确的编码并将输出转换为正确的编码。查看数据的所有内容都需要知道您正在使用的编码。

答案 1 :(得分:0)

我想我只是通过在解析它之前在html上处理它来修复它,感谢所有伟大的指针!

s/\&nbsp\;/ /g;