美丽的汤和 Unicode 问题

2023-11-24

我正在使用 BeautifulSoup 来解析一些网页。

有时我会遇到如下“unicode hell”错误:

在 TheAtlantic.com 上查看这篇文章的来源 [http://www.theatlantic.com/education/archive/2013/10/why-are-hundreds-of-harvard-students-stuying-ancient-chinese-philosophy/280356/ ]

我们在 og:description 元属性中看到这一点:

<meta property="og:description" content="The professor who teaches&nbsp;Classical Chinese Ethical and Political Theory claims, &quot;This course will change your life.&quot;" />

当 BeautifulSoup 解析它时,我看到这个:

>>> print repr(description)
u'The professor who teaches\xa0Classical Chinese Ethical and Political Theory claims, "This course will change your life."'

如果我尝试将其编码为 UTF-8 ,就像这个评论建议的那样:https://stackoverflow.com/a/10996267/442650

>>> print repr(description.encode('utf8'))
'The professor who teaches\xc2\xa0Classical Chinese Ethical and Political Theory claims, "This course will change your life."'

正当我以为我已经控制了所有的 unicode 问题时,我仍然不太明白发生了什么,所以我将提出几个问题:

1-为什么BeautifulSoup要转换&nbsp; to \xa0[拉丁字符集空格字符]?此页面上的字符集和标题是 UTF-8,我认为 BeautifulSoup 会提取该数据进行编码?为什么不将其替换为<space> ?

2-是否有一种通用的方法来规范转换的空格?

3-当我编码为 UTF8 时,在哪里\xa0成为序列\xc2\xa0 ?

我可以通过管道传输一切unicodedata.normalize('NFKD',string)帮助我到达我想去的地方 - 但我很想了解问题所在并避免将来出现类似问题。


您没有遇到问题。一切都按预期进行。

&nbsp;表示一个不间断空格字符。它不会被替换为空格,因为它不代表空格;它代表一个不间断的空间。用空格替换它会丢失信息:在该空格出现的地方,文本渲染引擎不应放置换行符。

不间断空格的 Unicode 代码点是 U+00A0,在 Python 中以 Unicode 字符串形式编写为\xa0.

The UTF-8U+00A0 的编码是十六进制的两个字节序列 C2 A0,或者用 Python 字符串表示形式编写,\xc2\xa0。在 UTF-8 中,任何超出 7 位 ASCII 集的内容都需要两个或更多字节来表示。在这种情况下,最高位组是第八位。这意味着它可以用两字节序列(二进制)表示110xxxxx 10xxxxxx其中 x 是代码点的二进制表示形式的位。对于A0的情况,即10000000,或者以 UTF-8 编码时,11000010 10000000或 C2 A0。

很多人都用&nbsp;在 HTML 中获取不会被通常的 HTML 空白折叠规则折叠的空格(在 HTML 中,所有连续的空格、制表符和换行符都会被解释为单个空格,除非其中之一)CSS white-space rules被应用),但这并不是它们真正的目的;它们应该用于名字之类的东西,比如“Mr. Miyagi”,你不希望“Mr.”之间有换行符。和“宫城”。我不确定为什么在这个特殊情况下使用它;它在这里似乎不合适,但这更多是您的源代码的问题,而不是解释它的代码的问题。

现在,如果您并不真正关心布局,因此您不介意文本布局算法是否选择它作为换行位置,但只想将其解释为常规空间,那么使用 NFKD 进行规范化是完全合理的答案(或者 NFKC,如果您更喜欢预先组合的口音而不是分解的口音)。这NFKC 和 NFKD 标准化映射字符,以便扩展在大多数上下文中表示本质上相同语义值的大多数字符。例如,连字扩展为 (ffi -> ffi),古式长 s 字符转换为 s (ſ -> s),罗马数字字符扩展为其单独的字母 (IV -> IV),以及不间断空格转换成正常空间。对于某些字符,NFKC 或 NFKD 标准化可能会丢失在某些上下文中重要的信息: ℌ 和 ℍ 都会标准化为 H,但在数学文本中可用于指代不同的事物。

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

美丽的汤和 Unicode 问题 的相关文章

随机推荐

  • 使用 TypeScript 和注入的 AngularJS 过滤器

    有人可以给我提供一个示例 说明如何在 TypeScript 中创建使用依赖注入的 Angular 过滤器 底部是我目前拥有的 工作正常 但我想做的是我想要访问 filter 的函数 以便我可以将 return date ToString 行
  • 如何将 TRC20 交易发送到某个地址

    我正在使用 tron web 查询某个地址的交易 但它不会返回发送到该地址的交易 其中传输的代币为 TRC20 这是行不通的 我想获取某个地址上的交易并获取 TRX trc10 和 trc20 交易 我做错了什么或者该怎么做 这是我的代码块
  • 如何使用 JDBC 执行 .sql 脚本文件[重复]

    这个问题在这里已经有答案了 可能的重复 使用 MySQL 和 JDBC 运行 sql 脚本 我有一个 SQL 脚本文件 其中包含 40 50 个 SQL 语句 是否可以使用 JDBC 运行此脚本文件 此链接可能会帮助您 http paste
  • np.empty 与 np.zeros 的速度

    我正在使用 numpy 版本 1 14 3 和 python 2 7 12 参考文献this问题 我发现使用 np zeros 和 np empty 初始化数组之间的速度显着不同 但是 输出是相同的 import numpy as np r
  • 修改 ASP.NET 服务器端的 html 输出

    第三方的webcontrol生成以下代码来显示自己 div div
  • 如何在管道步骤中使用 Jenkins 侧边栏链接插件?

    我正在开发这个插件https plugins jenkins io sidebar link 在詹金斯侧栏中添加链接 该插件与 jenkins 项目配置一起使用 现在我正在尝试添加一个管道步骤来调用此插件 我已经尝试过下面的代码行 但它不起
  • Apache HttpClient 制作多部分表单帖子

    我对 HttpClient 很陌生 而且我发现缺乏 和 或明显不正确 文档非常令人沮丧 我正在尝试使用 Apache Http Client 实现以下帖子 如下所列 但不知道如何实际执行 下周我将埋头于文档中 但也许更有经验的 HttpCl
  • 在 Python 3 中使用 XPath 解析 XML

    我有以下 xml
  • 使用 Stream 并关闭流时出现错误的 WebFaultException

    我们有一个使用 WCF 构建的 REST API 我们使用 WebFaultException 处理所有后端异常 如下所示 throw new WebFaultException
  • 在 Maven 项目中包含非 Java 源

    我正在开始一个项目 我预计该项目将包含大量非 Java 代码 主要是 shell 和 SQL 脚本 我仍然想用 Maven 来管理这个项目 非 Java 源代码和 Maven 的最佳实践是什么 源码应该去哪里 它们在生命周期的不同阶段会发生
  • Google Visualization 堆叠条形图中的标签值和总计

    I am trying to display the value of each bar and then the total value of all bars in a stacked bar chart The problem is
  • 异常:应通过 PYTHONHASHSEED 禁用字符串哈希的随机性在 pyspark 中意味着什么?

    我正在尝试从 pyspark 中的列表创建字典 我有以下列表 rawPositions Gives 1009794 LPF6 Comdty BC22 Enterprise 3 0 3904 125 390412 5 1009794 LPF6
  • 逐步寻找 Activiti Alfresco Workflow 教程 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我在哪里可以找到 Activiti Alfresco 工作流程 尤其是自定义工作流程 的简单教程 我是 Alfresco Activiti Worf
  • 在 ASP.NET vNext 中,为什么代码不即时重新编译?

    我正在使用 k web 从命令行运行 HelloMvc 示例应用程序 我尝试使用 kvm use runtime 使用可用的不同环境来运行它 当我更改控制器并在浏览器中按 F5 或 Ctrl F5 时 代码不会自动重新编译 页面也不会更改
  • 使用Java遍历到最深处

    我有一个如下的数据结构 Task id name subTasks Task 但问题是子任务可以包含具有另一个子任务的任务 这可以运行得很深 如下所示 Task1 Contains SubTask1 SubTask1 包含其子任务 你可以理
  • 如果我声明为空白页(strict_types=1);在 PHP 7 中位于文件顶部

    最近我正在查看 PHP 7 特别是返回类型声明 and 类型提示 我已经从源代码编译了 PHP 7 来自Github 并在 Ubuntu 14 04 虚拟盒中运行它 我尝试运行以下代码来测试新的例外情况 但它给出了一个空白页
  • 熊猫合并df错误

    我有 3 个数据框正在尝试合并到 pandas 中 一个有 20 列 另外两个各有 2 列 它们的组织方式如下 eth price head n 3 Out 6 time eth price 0 8 28 17 16 19 344 021
  • 区分两个数组中的额外元素?

    我的一位朋友在接受采访时被问到这个问题 您已给出两个整数数组 每个数组的大小为 10 两者都包含 9 个相等的元素 比如 1 到 9 只有一个元素不同 你将如何找到不同的元素 您可以采取哪些不同的方法 一种简单但冗长的方法是 对两个数组进行
  • 创建 clickonce webdeploy 包

    是否可以构建一个包含可使用标准 webdeploy 工具部署到 Web 服务器的 clickonce 应用程序的 Web 部署包 这是理想的过程 MSBuild YourFullyQualifiedProjectName csproj vb
  • 美丽的汤和 Unicode 问题

    我正在使用 BeautifulSoup 来解析一些网页 有时我会遇到如下 unicode hell 错误 在 TheAtlantic com 上查看这篇文章的来源 http www theatlantic com education arc