您在这里的真正问题似乎是您获得的是值的表示而不是值的表示。
>>> x = u"gcc-4.3.2"
>>> x
u'gcc-4.3.2'
>>> repr(x)
"u'gcc-4.3.2'"
>>> str(x)
'gcc-4.3.2'
如果您对从中获得价值的地方有任何控制权,我会先去那里处理。
警告:Unicode 不同是有原因的,如果你有 unicode 字符,你可能会遇到问题:
>>> x = u"ĝĝ"
>>> x
u'\u011d\u011d'
>>> repr(x)
"u'\\u011d\\u011d'"
>>> str(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
如果您无法控制所获取的数据,则 的值repr(x)
是您可以评估的表达式:
>>> x = "u'gcc-4.3.2'"
>>> eval(x)
u'gcc-4.3.2'
但是,请注意 eval由于多种原因非常不安全。
如果您想更安全地处理提取 unicode 字符串,您可以执行以下操作:
>>> import re
>>> x = "u'gcc-4.3.2' u'C'"
>>> re.findall("u'(.*?)'", x)
['gcc-4.3.2', 'C']
在这里,我们使用正则表达式来提取包含在u''
. 我们.*?
用来使操作不贪婪,确保我们最终不会["gcc-4.3.2' u'C"]
成为我们的输出。