在 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'
替换为适当的编码名称,这可以用于任何其他编码。
我正在使用 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'
替换为适当的编码名称,这可以用于任何其他编码。