utf-8字符编码问题

2024-01-01

我通过使用美丽的汤库从网页获得链接a.get('href')。链接中有一个奇怪的字符®但当我得到它时,它变成了®。我怎样才能正确地对其进行编码?我已经在页面开头添加了# -*- coding: utf-8 -*-

r = requests.get(url)

soup = BeautifulSoup(r.text)

Do not use r.text;将解码留给BeautifulSoup:

soup = BeautifulSoup(r.content)

r.content https://requests.readthedocs.io/en/latest/api/#requests.Response.content为您提供以字节为单位的响应,无需解码。r.text https://requests.readthedocs.io/en/latest/api/#requests.Response.text另一方面,响应被解码为unicode.

发生的情况是服务器未在响应标头中包含字符集。那一刻,requests遵循HTTP RFC 2261,第 3.7.1 节 http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7.1: text/回应默认情况下预计将使用 ISO-8859-1 (Latin 1) 字符集。

对于您的 HTML 页面,该默认值是错误的,并且您得到了不正确的结果;r.text将字节解码为 Latin-1,结果是Mojibake http://en.wikipedia.org/wiki/Mojibake:

>>> print u'®'.encode('utf8').decode('latin1')
®

HTML 本身可以包含正确的编码在 HTML 页面本身中,形式为<meta> tag https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta在 HTML 标头中。 BeautifulSoup 将使用该标头并为您解码字节。

即使<meta>header 标签丢失,BeautifulSoup 包含其他方法自动检测编码 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#encodings.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

utf-8字符编码问题 的相关文章

随机推荐

  • 将 YUV 作为字节数组导入

    我正在开发一个项目 必须对 YUV420 SP NV21 图像 从 Android 相机拍摄 应用阈值 以确定哪些像素是 黑色 哪些像素是 白色 因此 我想将其作为字节数组导入 Python 中 使用 OpenCV NumPy PIL 这样
  • 如何从 bash 脚本在 GitHub 操作上创建输出?

    我有一个 GitHub 操作 本质上是一个 bash 脚本 我的操作的 javascript 部分执行 bash 脚本 const core require actions core const exec require actions e
  • 在模型上重复纹理

    我正在创建一个小游戏 你在迷宫中 迷宫的组织方式是2D Array 描述x and z position和block type 原来如此Tile based 假设每个块都是1 m 现在我的角色是2m高 迷宫应该是4m高的 因此 如果该瓷砖上
  • SQL查询多个AND和OR不起作用

    我有一个单元格 其中包含由双管分隔的值 我正在尝试使用以下内容搜索此单元格的内容 其中 10 是要搜索的数字 10 10 10 和 10 我的查询似乎只返回 10 没有其他变化 有人可以告诉我为什么它不起作用吗 提前谢谢了 您在下面看到的
  • 为什么从 python/uwsgi 内部调用时 `node.js` 会死掉?

    从外壳这个python启动并与之通信的代码node js过程工作正常 gt from subprocess import gt js function m console log m hello world gt out err Popen
  • 更改java的.class文件而不重新编译

    有什么办法可以做到以下几点 所以我有一个project jar 文件 在其中我需要修改传递给classA class 的某些方法的字符串 例如 假设这个 classA class 有一个名为 change String a String b
  • 检查 Postgres 复合字段是否为 null/空

    With Postgres 复合类型 http www postgresql org docs 9 2 static rowtypes html您基本上可以构建一个字段 其结构被定义为另一个表 我有一个名为 recipient 的复合字段
  • 错误:Angular 解析期间出现 Http 失败

    我正在学习 Angular 我想在 HTML 页面上显示 JSON 数据 错误是 Angular 解析期间 Http 失败 我不知道为什么请告诉我我的错误并给我链接如何显示多种类型的 JSON 数据 person component htm
  • MSBuild - 设置解决方案的属性

    我们在 VS2008 中使用 NET 3 5 我有一个包含约 20 个项目的解决方案 随着应用程序的增长和添加新模块 这个数字会随着时间的推移而增长 今天我需要为每个项目设置一个属性 我必须编辑每个 csproj 文件以添加以下内容
  • 如何避免在 Visual Studio 2017 中加载 Microsoft.VisualStudio.Threading 时出现错误

    我已在仅针对 Visual Studio 2019 的版本中对 Visual Studio 包进行了更新日志 我开始使用 NuGet 包的一项更改微软VisualStudio SDK 版本 16 0 202 并删除了许多对 DLL 的单独引
  • "aaaa".StartsWith("aaa") 返回 false

    如果这不是一个错误 那么任何人都可以解释这种行为背后的原因吗 事实上 似乎每个奇数个字母都会返回 false string test aaaaaaaaaaaaaaaaaaaa Console WriteLine test StartsWit
  • php oop文件上传

    我正在研究 oop php 文件上传脚本 很简单 但不起作用 问题是什么 我学习如何使用 FILE 以及如何编写 oop 风格的代码 Thanks upload php 是
  • Promise - 是否可以强制取消 Promise

    我使用 ES6 Promises 来管理所有网络数据检索 在某些情况下我需要强制取消它们 基本上 场景是这样的 我在 UI 上进行预先输入搜索 其中请求委托给后端必须根据部分输入执行搜索 虽然此网络请求 1 可能需要一点时间 但用户继续键入
  • SQL 在 Select 语句中合并两列

    如果我的数据库中有一个列是 Address1 和 Address2 我如何组合这些列 以便我只能在 select 语句中对其执行操作 我仍然会将它们单独保留在数据库中 我希望能够做到这一点 WHERE completeaddress LIK
  • Dos 内联 IF 测试错误级别,不使用延迟扩展

    无论如何 是否可以在不延迟扩展的情况下执行以下操作 一行 为了可读性而中断 comspec v on c windir System32 reg exe import c temp test reg if errorlevel neq 0
  • 为什么SELECT标签的下拉框显示在错误的位置?

    My CSS file doesn t touch the tag select at all also no CSS classes are related to the tag select But when showing in br
  • C# 相当于 VB6 字符占位符

    C 是否有相当于 VB6 格式函数中使用的 符号 VB6 字符占位符 显示一个字符或一个空格 如果该字符串在格式字符串中出现 的位置有字符 则显示它 否则 在该位置显示一个空格 占位符从右到左填充 除非有 格式字符串中的字符 我猜你的意思是
  • 抛出异常:WebDriver.dll 中的“OpenQA.Selenium.WebDriverException”

    我是使用 C 的 Selenium 新手 每当我尝试运行简单的代码时 我都会得到 Exception thrown OpenQA Selenium WebDriverException in WebDriver dll 每次 注意 我使用的
  • 如何在Python中跳出双while循环?

    新手蟒蛇在这里 如果用户选择 Q 作为 退出 我如何才能跳出第二个 while 循环 如果我按 m 它会进入主菜单 在那里我可以停止按 Q 键 while loop 1 choice main menu if choice 1 os sys
  • utf-8字符编码问题

    我通过使用美丽的汤库从网页获得链接a get href 链接中有一个奇怪的字符 但当我得到它时 它变成了 我怎样才能正确地对其进行编码 我已经在页面开头添加了 coding utf 8 r requests get url soup Bea