在 Python 中解码字符(YouTube 数据 API)

Posted

技术标签:

【中文标题】在 Python 中解码字符(YouTube 数据 API)【英文标题】:Decode character in Python (YouTube Data API) 【发布时间】:2021-03-02 01:54:33 【问题描述】:

我正在使用 YouTube 数据 API 来获取一些音乐的标题。 但是当我得到标题并打印出来时,标题看起来就像是 Unicode 字符。 例如:

#music title: Røyksopp
print(title)
#Output: R\u00f6yksopp

或者:

#music title: Nurse's
print(title)
#Output: Nurse's

为什么我会得到这个以及如何解决这个问题?

【问题讨论】:

【参考方案1】:

这不是编码而是转义:

>>> import html
>>> html.unescape("Nurse's")
"Nurse's"

另外一个已经解码,无事可做:

>>> "R\u00f6yksopp"
'Röyksopp'

如果您仍然看到所有 ASCII 字符而不是重音文本,则可能是您(或您的客户端库)在某处错过了 json 反序列化步骤:

>>> json.loads('"\\u00f6"')
'ö'

【讨论】:

@stvar 是的,你是对的。这有点奇怪,因为问题显示 Røyksopp 文本将是代码点 \u00f8 (笔画)而不是 \u00f6 (分音) 这就是为什么我要求 OP 发布他的代码和他的罪魁祸首视频的 ID。【参考方案2】:

首先,请确认您从 API 获得的不是(引用您的话)Unicode 字符。从技术上讲,这些字符序列是 HTML character references,也称为HTML entities.

您遇到的行为是 well-known issue of the API,据我所知没有其他解决方案,除了您自己必须用这些 HTML 实体替换它们所代表的实际字符。

在 Python 3 的上下文中,您可以很好地使用函数 html.unescape,它是 html 模块的一部分:

import html
print(html.unescape(title))

titleNurse's 时,此代码将生成Nurse's


关于您的输出R\u00f6yksopp 的问题,请发布查询API 的代码上下文,以了解您的程序未正确处理\uXXXX escape sequences 的原因。您也可以发布产生此输出的视频 ID,以便我自己检查。

【讨论】:

以上是关于在 Python 中解码字符(YouTube 数据 API)的主要内容,如果未能解决你的问题,请参考以下文章

YouTube“书呆子统计”如何运作。或者如何从 JavaScript 获取正在播放的视频的编解码器信息

Python的学习之旅———基本数据类型(字符编码)

Python 进阶 — 字符串编码(encode)与解码(decode)

J2ME 中用于播放 Youtube 视频的 Flv 解码器

ASN.1语法以及在python中如何编码解码

如何使用 Python 或 Java 解码这个奇怪的字符串 [关闭]