【问题标题】:UnicodeEncodeError when receiving emoji unicode in JSON在 JSON 中接收表情符号 unicode 时出现 UnicodeEncodeError
【发布时间】:2021-03-16 02:28:52
【问题描述】:

我正在使用 Spotipy 库接收 Spotify 播放列表数据的 JSON 对象。此 playlsit 数据在“名称”字段中包含表情符号。当我尝试打印时,这会引发异常。由于某种原因,我什至无法访问 JSON 的其他部分。

playlist_data = sp.search(q = 'best of ' + str(year),type = 'playlist',limit = 3)['playlists']
print(playlist_data)

给出错误

Traceback (most recent call last):
  File "spotify.py", line 111, in <module>
    get_ablum_by_year(i)
  File "spotify.py", line 89, in get_ablum_by_year
    print(playlist_data)
  File "C:\Users\jjent\AppData\Local\Programs\Python\Python37-32\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u30c4' in position 349: character maps to <undefined>

保留表情符号与此解决方案无关,我只想访问 JSON 的其余部分,但在这些情况下,我在尝试解析 JSON 时遇到关键错误。

【问题讨论】:

  • 向我们展示足够的代码来重现问题和完整的错误回溯。
  • 'sp' 是一个 Spotify API 库,您需要一个客户端 ID/秘密来重现问题。添加了完整的回溯,但我认为它没有透露太多信息
  • 回溯总是包含有用的信息...这里'charmap' codec can't encode character '\u30c4' 给出了一个违规字符并允许测试解决方案,...encodings\cp1252.py" 表示 print 使用的字符集是 cp1252。

标签: python json spotify spotipy


【解决方案1】:

问题仅在print 语句处,并且是由您的Windows 系统使用cp1252 编码引起的。这意味着之前的 Spotify 调用正确地完成了它的工作,并检索了 1252 代码页中缺少的 unicode 字符。

一种快速的解决方法是在打印前通过使用errors='replace' 进行编码和解码来控制转换:

print(str(playlist_data).encode('cp1252', errors='replace').decode('cp1252'))

任何非 cp1252 字符都将显示为 ?

这可以用于任何其他编码,只需将'cp1252' 替换为适当的编码名称。

【讨论】:

  • 这行得通!我需要将它转换回 JSON,这给了我一些问题,但我想我可以解决它们,谢谢!
  • @user3078867:这个技巧只能在打印时使用。改变值是没有用的。
猜你喜欢
  • 1970-01-01
  • 2016-12-02
  • 2020-09-13
  • 2016-04-28
  • 2018-05-30
  • 1970-01-01
  • 2014-03-05
  • 2015-05-09
  • 1970-01-01
相关资源
最近更新 更多