Python 返回符号的十六进制

Python 返回符号的十六进制,python,unicode,discord.py,Python,Unicode,Discord.py,我有一个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[

我有一个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)
这将获取所有歌曲的视频标题

这并不是说这不起作用,而是我得到了以下输出(缩短

如果您没有注意到编码错误/问题,那么这里就是这个看起来很垃圾的东西:
\x81\x93ã\x80\x8dæ\xad\x8cã\x81ã\x81\x9fã\x80\x90ï¼\x8


我怎样才能让python返回正确的符号istead这个十六进制代码??任何信息都将是非常好和受欢迎的!

您是否尝试过隐式转换为Unicode? 例如:

    a = u"[狂おしく咲いた凄惨な骸は奏で、愛おしく裂いた少女は聖餐の詞を謳う。 #10] 謳"

这使得字符串Unicode受到支持,可能会解决您的问题

您是否尝试过隐式转换为Unicode? 例如:

    a = u"[狂おしく咲いた凄惨な骸は奏で、愛おしく裂いた少女は聖餐の詞を謳う。 #10] 謳"

这使得字符串Unicode受到支持,并可能解决您的问题

以下是以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「恋のヒメヒメぺったんこ」歌ってみた【*なみりん】'

我不确定您的bot正在做什么,但它以默认ISO 8859-1编码获取文本,而不是正确解码UTF-8。

以下是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。

如果你分别循环
vt
say
,你看到相同的输出吗?我现在尝试一下,然后返回给你Patrick Haugh。你使用的是哪种Python版本?有impPython2和Python3之间在Unicode处理方面存在重大差异。discord.py不支持Python3.6作为Python2。如果您分别遍历
vt
say
这两个版本,您是否看到相同的输出?我现在尝试一下,然后返回给您Patrick Haugh。您使用的是哪一个Python版本?在Python 2和3.Python 3.6之间的Unicode处理,因为discord.py不支持Python 2。我可以使用此方法,但我必须单独获取每个Unicode字符来纠正问题,不是吗?毕竟,可能出现的不仅仅是日文字符,还可能是德文、法文、俄文等。尽管此方法可以解决问题oesn不能满足我的所有需求。从一开始就使用Unicode怎么样?执行
fu“{video_title=youtube.xpath(//span[@id='eow-title']/@title”)}”
maywork@TylerT这至少会引起语法错误,因为你不能在f字串中使用赋值,而且引语会让解释器感到困惑。OP:我建议你使用一个列表comp并遵循Andrey的解决方案。因为你不能只在预先存在的字串前面“添加”一点
u
(即从
xpath(…)
获取),你需要显式地对它进行编码。我可以使用这个方法,但我必须单独获取每个Unicode字符来纠正问题,不是吗?毕竟,可能出现的不仅仅是日文字符,还可能是德文、法文、俄文等。尽管这种方法可行,但它不适合我的所有需要。制作它从一开始就使用Unicode?doing
fu“{video_title=youtube.xpath(//span[@id='eow-title']/@title”)}”
maywork@TylerT这至少会引起语法错误,因为你不能在f字串中使用赋值,而且引语会让解释器感到困惑。OP:我建议你使用一个列表comp并遵循Andrey的解决方案。因为你不能只在预先存在的字串前面“添加”一点
u
(即从
xpath(…)
中获取),您需要显式地对其进行编码。