如何在python 2.7中将unicode值字符串转换为unicode

时间:2014-05-11 10:52:39

标签: python python-2.7 unicode

我使用python 2.7。 我想将unicode值字符串转换为unicode。

print u'abc' == unicode('abc')  #True  
print u'\u0026abc' == unicode('\u0026abc')  #False

我想要做的是将'\ u0026abc'变成一个变量并转换为你'u uc26'。 但你可以看到unicode('\ u0026abc')不等于你'\ u0026abc'。
有没有什么方法可以用来像'\ u0026abc'这样的变量?

2 个答案:

答案 0 :(得分:4)

在字节字符串中' \ uxxxx'没有特别的逃脱序列,它只是一个反斜杠,然后是' u'。如果你真的有一个带有\ u sequnces的字节字符串,请使用正则表达式将它们转换为unicode:

import re
text = '\\u0026abc'
text = re.sub('\\\\u(....)', lambda x:unichr(int(x.group(1),16)), text)

答案 1 :(得分:2)

如果您尝试打印unicode("\u0026abc"),您将看到问题的根源:

>>> a = u"abc"
>>> ua = unicode("abc")
>>> a == ua
True
>>> b = u"\u0026abc"
>>> b
u'&abc'
>>> ub = unicode("\u0026abc")
>>> ub
u'\\u0026abc'

您可以这样修复:

>>> ub = unicode("&abc")
>>> ub
u'&abc'
>>> b == ub
True

但这需要人来改变代码。要以编程方式执行此操作,您可以尝试执行以下操作:

>>> c = "\u0026abc"
>>> c
'\\u0026abc'
>>> cc = "u\'" + c + "\'"
>>> cc
"u'\\u0026abc'"
>>> eval cc
>>> eval(cc)
u'&abc'

然而,这个解决方案并不是很普遍,Daniel的回答提供了更好的解决方案。