Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中unicode字符串的行为_Python_Python 3.x_Unicode - Fatal编程技术网

python中unicode字符串的行为

python中unicode字符串的行为,python,python-3.x,unicode,Python,Python 3.x,Unicode,我已经看到了这一点,我怀疑如何在运行时将var转换为unicode? 使用unicode函数正确吗? 是否有其他方法在运行时转换字符串 print(u'Cami\u00f3n') # prints with right special char name=unicode('Cami\u00f3n') print(name) # prints bad ===> Cami\u00f3n name.encode('latin1') print(name.decode('latin1')) #

我已经看到了这一点,我怀疑如何在运行时将var转换为unicode? 使用unicode函数正确吗? 是否有其他方法在运行时转换字符串

print(u'Cami\u00f3n') # prints with right special char

name=unicode('Cami\u00f3n')
print(name) # prints bad ===> Cami\u00f3n

name.encode('latin1')
print(name.decode('latin1')) # prints bad ===> Cami\u00f3n

encoded_id = u'abcd\xc3\x9f'
encoded_id.encode('latin1').decode('utf8')
print encoded_id.encode('latin1').decode('utf8') # prints right

我在stackoverflow上看到了很多python unicode问题,但我无法理解这种行为。

这正是因为如果您没有为
unicode
函数指定任何编码,那么:

unicode()将模仿str()的行为,只是它返回unicode字符串而不是8位字符串。更准确地说,若对象是Unicode字符串或子类,它将返回该Unicode字符串,而不应用任何附加解码

因此,您将拥有unicode的
str
版本(unicode部分将被转义):

为了解决这个问题,您可以使用
'unicode-escape'
作为编码,以避免将unicode转换为字符串

>>> name=unicode('Cami\u00f3n','unicode-escape')
>>> name
u'Cami\xf3n'
>>> print(name)
Camión

你想干什么?您正在尝试转换哪些数据?它是从哪里来的?“运行时”是什么意思?
\uhhh
转义序列仅在Python unicode文本中工作。如果您有这样的转义序列的数据,那么您很可能有JSON数据,它使用相同的语法。如果是这样,请使用JSON解析器来解析这些数据。您可以要求Python使用特殊的编解码器来解释这些序列,但这通常是对数据的错误解释。请分享您的实际数据样本,以便我们可以帮助您。工作非常有魅力。我试着用它来打印数据库中的数据,这些数据带有用于代码测试的特殊字符。谢谢请注意,
unicode转义
解释的不仅仅是
\uhhh
转义。如果文本中还有其他“\`反斜杠转义,这些也将被解释,并且可能不是您所期望的。@Ulyarez欢迎,还要注意Martijn的评论!
>>> name=unicode('Cami\u00f3n','unicode-escape')
>>> name
u'Cami\xf3n'
>>> print(name)
Camión