我已经在这个问题上工作了一个星期,但仍然找不到可行的解决方案。我解析的HTML文件包含用UTF-8编码的波兰字母。在提取我感兴趣的信息后,我将它们保存到文件或打印到控制台,但所有的波兰字符都无法正确显示。
我尝试使用Stack Overflow和其他论坛上的所有方法,但是对其他人有效的方法出现了某些问题,对我不起作用。 我使用了以下方法:
use open qw(:std :utf8);
use HTML::TreeBuilder qw( );
use Object::Destroyer qw( );
#and many others;
这是我的 Perl 代码:
use strict;
use warnings;
use feature 'say';
use HTML::TreeBuilder;
use File::Find;
use Encode;
my $location="C:\\MyLocation";
open (MYFILE, '>>data.txt');
sub find_txt {
my $F = $File::Find::name;
if ($F =~ /index.html$/ ) {
my $tr = HTML::TreeBuilder->new->parse_file('index.html');
for my $div ($tr->look_down(_tag => 'h2', 'class' => 'featured')) {
say $div->as_text;
print (MYFILE $div->as_text);
}
for my $div ($tr->look_down(_tag => 'div', 'class' => 'post-content')) {
for my $t ($div->look_down(_tag => 'p')) {
say $t->as_text;
print (MYFILE $t->as_text);
}
}
for my $div ($tr->look_down(_tag => 'h4', 'class' => 'related-posts')) {
for my $t ($div->look_down(_tag => 'a')) {
say $t->as_text;
print (MYFILE $t->as_text);
}
}
}
}
find(\&find_txt, $location);
close (MYFILE);
这是导致问题的HTML文件片段:
<div class="post-content">
<p>(łac. abacus)</p>
<p>1. płyta będąca najwyższą częścią kolumny</p>
<p>2. w starożytności – deska do liczenia, pierwowzór liczydła</p>
我不确定您的浏览器是否能够显示波兰字符,但是它们被Unicode编码为104、106、118、141、143、D3、15A、179、17B、105、107、119、142、144、F3、15B、17A和17C。
use open qw(:std :utf8)
,你说你已经尝试过了。你是如何查看程序的输出结果的?如果你是在Windows的cmd
控制台上显示它,那么可能设置的代码页不正确。输入chcp 65001
以将其设置为UTF-8。 - Borodin