在 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))
当title
为Nurse's
时,此代码将生成Nurse's
。
关于您的输出R\u00f6yksopp
的问题,请发布查询API 的代码上下文,以了解您的程序未正确处理\uXXXX
escape sequences 的原因。您也可以发布产生此输出的视频 ID,以便我自己检查。
【讨论】:
以上是关于在 Python 中解码字符(YouTube 数据 API)的主要内容,如果未能解决你的问题,请参考以下文章
YouTube“书呆子统计”如何运作。或者如何从 JavaScript 获取正在播放的视频的编解码器信息
Python 进阶 — 字符串编码(encode)与解码(decode)