在 JSON 中接收表情符号 unicode 时出现 UnicodeEncodeError

UnicodeEncodeError when receiving emoji unicode in JSON

我正在使用 Spotipy 库接收 Spotify 播放列表数据的 JSON 对象。此 playlsit 数据在 'name' 字段中包含表情符号。当我尝试打印时抛出异常。出于某种原因,我什至无法访问 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 时遇到关键错误。

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

一个快速解决方法是通过使用 errors='replace' 编码并解码回来来控制打印前的转换:

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

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

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