Python 接收JSON格式的表情unicode时出现unicode错误

Python 接收JSON格式的表情unicode时出现unicode错误,python,json,spotify,spotipy,Python,Json,Spotify,Spotipy,我正在使用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 cal

我正在使用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>
回溯(最近一次呼叫最后一次):
文件“spotify.py”,第111行,在
按年份获得(i)
文件“spotify.py”,第89行,在get_ablum_by_year中
打印(播放列表\u数据)
文件“C:\Users\jjent\AppData\Local\Programs\Python\Python37-32\lib\encodings\cp1252.py”,第19行,在encode中
返回codecs.charmap\u encode(输入、自身错误、编码表)[0]
UnicodeEncodeError:“charmap”编解码器无法对位置349中的字符“\u30c4”进行编码:字符映射到

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

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

playlist_data = sp.search(q = 'best of ' + str(year),type = 'playlist',limit = 3)['playlists']
print(playlist_data)
一个快速解决方法是在打印前通过使用
errors='replace'
编码并解码返回来控制转换:

print(str(playlist_data).encode('cp1252', errors='replace').decode('cp1252'))
任何非cp1252字符将显示为


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

显示足够的代码来重现问题,完整的错误回溯。'sp'是Spotify API库,您需要客户端ID/密码来重现问题。添加了完整的回溯,但我认为它并没有透露太多信息回溯总是包含有用的信息。。。这里,
“charmap”编解码器无法对字符“\u30c4”进行编码。
给出了一个有问题的字符并允许测试解决方案,
…encodings\cp1252.py“
说明print使用的字符集是cp1252。这很有效!我需要将它转换回JSON,这给了我一些问题,但我想我可以解决它们,谢谢@user3078867:该技巧只能在打印时使用。更改值是没有用的。