将Unicode-Hex utf-8字符串转换为Unicode字符串的Python方法

5

已有s = u'Gaga\xe2\x80\x99s',但需要转换为t = u'Gaga\u2019s'

如何最好地实现此转换?

3个回答

7
s = u'Gaga\xe2\x80\x99s'
t = u'Gaga\u2019s'
x = s.encode('raw-unicode-escape').decode('utf-8')
assert x==t

print(x)

产量
Gaga’s

我在Windows终端中得到了“Gaga's”。 - rocksportrocker
print repr(t) 仍然输出 'Gaga\xe2\x80\x99s' - Acorn
感谢您!@rocksportrocker,也可以接受一个答案。 - Henry Thornton
3
在进一步研究后,我认为Mark Tolonen提供的答案更好。为了让SO在顶部报告最佳答案,请考虑接受他的答案,链接为:https://dev59.com/_VvUa4cB1Zd3GeqPw8k3#7610946。 - unutbu
@unutbu:我已经将Mark和你的方法应用到我们的数据上,两种方法都有效。但是,我接受了建议并更改了最佳答案。感谢大家,因为这些通常是棘手的领域。 - Henry Thornton
显示剩余3条评论

7

无论您在哪里解码原始字符串,它很可能是使用Latin-1或其近亲进行解码的。由于Latin-1是Unicode的前256个码点,因此这样做是可行的:

>>> s = u'Gaga\xe2\x80\x99s'
>>> s.encode('latin-1').decode('utf8')
u'Gaga\u2019s'

你好,如果我想要做相反的操作,将Unicode表示转换为十六进制表示,因为我正在将数据发送到某个系统,该系统期望以十六进制格式接收Unicode数据。 - securecurve
@securecurve,可能是某种编码方式。请提出您的具体要求以及示例输入和输出的问题。 - Mark Tolonen

2
import codecs

s = u"Gaga\xe2\x80\x99s"
s_as_str = codecs.charmap_encode(s)[0]
t = unicode(s_as_str, "utf-8")
print t

打印

u'Gaga\u2019s'

对此很好奇...我在2.7或3.3的Python文档中没有看到codecs.charmap_encode,链接在哪里? - agf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接