我有一个discord.py机器人,当前正在将此代码用于youtube命令,并从YouTube返回前5首歌曲
for v in videolist:
youtube = etree.HTML(urlopen(v).read())
video_title = youtube.xpath("//span[@id='eow-title']/@title")
v_t = ''.join(video_title)
vt.append(v_t)
names = vt[1:6]
await bot.say(vt)
这将获取所有歌曲的视频标题。
现在不是不是这样,但是我得到以下输出(缩短
`['Yowamushi Pedal - Love Hime Opening [Full Song]', 'Koi no Hime Hime Pettankoã\x80\x8cæ\x81\x8bã\x81®ã\x83\x92ã\x83¡ã\x83\x92ã\x83¡ã\x81ºã\x81£ã\x81\x9fã\x82\x93ã\x81\x93ã\x80\x8dæ\xad\x8cã\x81£ã\x81¦ã\x81¿ã\x81\x9fã\x80\x90ï¼\x8aã\x81ªã\x81¿ã\x82\x8aã\x82\x93ã\x80\x91', '~ hime hime `:
如果您没有注意到编码错误/问题,那么这里的内容看起来很垃圾:\x81\x93ã\x80\x8dæ\xad\x8cã\x81£ã\x81¦ã\x81¿ã\x81\x9fã\x80\x90ï¼\x8
我如何获取python返回正确的符号,而不是此十六进制代码?任何信息都很棒,欢迎您!
答案 0 :(得分:2)
以下是用UTF-8编码的日语字符串的十六进制值:
e3, 80, 8c, e6, 81, 8b, e3, 81, ae, e3, 83, 92, e3, 83, a1, e3, 83, 92, e3, 83, a1, e3, 81, ba, e3, 81, a3, e3, 81, 9f, e3, 82, 93, e3, 81, 93, e3, 80, 8d, e6, ad, 8c, e3, 81, a3, e3, 81, a6, e3, 81, bf, e3, 81, 9f, e3, 80, 90, ef, bc, 8a, e3, 81, aa, e3, 81, bf, e3, 82, 8a, e3, 82, 93, e3, 80, 91
如果您斜视一下眼睛,就会看到其中的“垃圾外观”。
“默认修复程序”似乎可以正常工作,即从ISO 8859-1重新编码为UTF-8:
对于此输入:
s = 'Koi no Hime Hime Pettankoã\x80\x8cæ\x81\x8bã\x81®ã\x83\x92ã\x83¡ã\x83\x92ã\x83¡ã\x81ºã\x81£ã\x81\x9fã\x82\x93ã\x81\x93ã\x80\x8dæ\xad\x8cã\x81£ã\x81¦ã\x81¿ã\x81\x9fã\x80\x90ï¼\x8aã\x81ªã\x81¿ã\x82\x8aã\x82\x93ã\x80\x91'
此代码:
s.encode('latin-1').decode('utf-8')
产生以下输出:
'Koi no Hime Hime Pettanko「恋のヒメヒメぺったんこ」歌ってみた【*なみりん】'
我不确定您的机器人在做什么,但是它会以默认的ISO 8859-1编码获取文本,而不是正确地解码UTF-8。
答案 1 :(得分:1)
您是否尝试过隐式转换为Unicode? 例如:
a = u"[狂おしく咲いた凄惨な骸は奏で、愛おしく裂いた少女は聖餐の詞を謳う。 #10] 謳"
这将支持Unicode字符串,并且可能会解决您的问题