html - 无法正确解码 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;
菱形/问号字符消失了,但在此站点和其他站点的输出文件中出现了许多奇怪的字符(例如,大引号不能正确呈现)。
解决方案
这个问题看起来像旧的 ISO 8859-1 或 Windows CP1252 编码。此数据需要转码为 utf-8。如果您将其保存为文件,则可以使用在线转换器。没有别的办法。如果要将其保存为文件,则最好创建两个文件,一个为 ISO 8859,另一个为 ANSI (win 1252),然后进行转换。保存的错误是不可挽回的破坏。
编辑——
准确地说——对于普通人来说是不可挽回的。
这 '?? ?非常质疑的行 - 表示不是英语或德语的文本。
推荐阅读
- node.js - 如何将 Zoom 集成到 reactjs 应用程序中?
- javascript - 尝试实施 Ceasar 密码时,我的解密调用返回无效响应,为什么?
- ruby - 詹金斯:找不到用于构建的ruby命令
- python - 使用 Python 进行网页抓取:TypeError:“NoneType”类型的参数不可迭代
- payment-gateway - 无法调用基本回调万事达卡
- rest - 以正确的方式设计 REST-API
- spring-boot - 使用 Keycloak 的 Spring Boot 来保护休息服务
- hyperledger-fabric - 无法在 Fabric 中创建具有新组织的频道,出现错误:尝试包含不在联盟中的成员
- php - 在 Laravel 中显示来自搜索表单的多个结果的问题
- c++ - 当我的程序不在焦点时,不选择 GetAsyncKeyState。玩游戏时不工作