首页 > 解决方案 > 无法正确解码 utf-8 HTML

问题描述

我正在从网站上抓取内容。我的执行抓取的 Perl 脚本使用该utf8模块。我的脚本有效,但是,一个站点特别给了我一个奇怪的问题,其中一些空格给我一个菱形的问号,我不知道如何解决它。当我从网站的保存 HTML 中本地拉出网页时,我看到了它们。例子:

Extreme heat waves have already�resulted in testing sites throughout the country�closing or modifying their schedules.�The heat even damaged 400 tests in Washington, DC, in June. 

这是我抓取的实际页面:https: //www.motherjones.com/politics/2020/08/a-hurricane-a-pandemic-and-trump-the-triple-crisis-is-barreling-down -佛罗里达州/

我的本地网页内容如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"></head>

...snip...

</html>

我正在用 perl 写这样的文件:

open my $out, '>',  $path_to_content;
print $out $content;
close $out;

请注意,如果我将其更改为:

open my $out, '>:encoding(UTF-8)',  $path_to_content;
print $out $content;
close $out;

菱形/问号字符消失了,但在此站点和其他站点的输出文件中出现了许多奇怪的字符(例如,大引号不能正确呈现)。

标签: htmlperlutf-8

解决方案


这个问题看起来像旧的 ISO 8859-1 或 Windows CP1252 编码。此数据需要转码为 utf-8。如果您将其保存为文件,则可以使用在线转换器。没有别的办法。如果要将其保存为文件,则最好创建两个文件,一个为 ISO 8859,另一个为 ANSI (win 1252),然后进行转换。保存的错误是不可挽回的破坏。

编辑——
准确地说——对于普通人来说是不可挽回的。
这 '?? ?非常质疑的行 - 表示不是英语或德语的文本。


推荐阅读