我的所有内容都在我的代码中运行,但我仍然很好奇。我有一个字符串:“stación。”当我将该字符串转换为unicode时,我得到:
unicode('stación', 'utf-8')
>>> u'staci\xf3n'
那里的“\ xf3”看起来像一个字节字符。这与以下不同:
unicode('Поиск', 'utf-8')
>>> u'\u041f\u043e\u0438\u0441\u043a'
在后一个示例中,与之前转换为unicode的所有内容一样,我得到以“\ u”开头的unicode字符。通常,当我看到以“\ x”开头的字节时,我认为存在问题。什么给这里?这是因为“ó”是扩展的ASCII吗?
答案 0 :(得分:2)
不,这是因为“ó”是前255个字符内的非ASCII字符。由于它可以使用单个字节表示,因此我们在表示中保存了2个字符。其他两个表示是有效的,但不是必需的。
>>> u'\u00f3'
u'\xf3'
>>> u'\U000000f3'
u'\xf3'
答案 1 :(得分:0)
u'\xf3'
不是一个字节;它是一个带有单个Unicode代码点(U+00f3 LATIN SMALL LETTER O WITH ACUTE
)的Unicode字符串。
你看到的是什么(u'\xf3'
),Python 2选择用0..255
范围内的Unicode序号(整数)表示Unicode字符,这些字符不是可打印的ascii字符(Python 3会显示{{1}在这里,默认情况下,只有不可打印的字符使用'ó'
形式。由于@Ignacio Vazquez-Abrams said:'\xhh'
和u'\u00f3'
文字会创建完全相同的Unicode字符串。
你可以看到Unicode字符(u'\U000000f3'
)在不同的字符编码中看起来像字节的比较:
u'\xf3'
注意:>>> print(u'\xf3')
ó
>>> u'\xf3'.encode('utf-8')
b'\xc3\xb3'
>>> u'\xf3'.encode('utf-16be')
b'\x00\xf3'
>>> u'\xf3'.encode('utf-32le')
b'\xf3\x00\x00\x00'
>>> u'\xf3'.encode('cp1252')
b'\xf3'
和b'\xf3'
是不同的事情。前者是包含单个字节(整数u'\xf3'
)的字节字符串,后者是包含单个Unicode代码点的Unicode字符串(Unicode序数243
)。数量是相同的243
单位是不同的 - 100卡路里与100克不同。