Строковые литералы Python Unicode:: В чем разница между '\u0391' и u'\u0391'
Я использую Python 2.7.3. Кто-нибудь может объяснить разницу между литералами:
'\u0391'
а также:
u'\u0391'
и другой способ, которым они отражены в REPL ниже (особенно дополнительная косая черта, добавленная к a1):
>>> a1='\u0391'
>>> a1
'\\u0391'
>>> type(a1)
<type 'str'>
>>>
>>> a2=u'\u0391'
>>> a2
u'\u0391'
>>> type(a2)
<type 'unicode'>
>>>
2 ответа
Вы можете использовать только экранирование Unicode (\uabcd
) в строковом литерале Юникода. Они не имеют смысла в байтовой строке. Юникод Python 2 (u'some text'
) это другой тип объекта Python из строки байтов Python ('some text'
).
Это как использовать \t
против \T
; первый имеет значение в литералах python (он интерпретируется как символ табуляции), второй означает просто обратную косую черту и заглавную букву T (два символа).
Чтобы понять разницу между Unicode и байтовыми строками, пожалуйста, прочитайте Python Unicode HOWTO; Я также могу порекомендовать статью Джоэла Спольски о Unicode.
Примечание: в Python 3 применяются те же различия, но 'some text'
является строковым литералом Unicode, и b'some text'
это синтаксис байтовой строки.
В отличие от C, в Python строка может быть заключена в простые кавычки ('
) а также двойные кавычки ("
) - оставляя в стороне тройные двойные кавычки """
,
Таким образом, '\u0391'
это только строка, содержащая буквы \
, u
, 0
, 3
, 9
а также 1
, Когда довольно печатать эту строку, \
сбежал через другого \
,
Наоборот, имея u
впереди делает строку считающейся Юникодом, и все экранированные значения оцениваются. Таким образом, u'\u0391'
интерпретируется как "строка Unicode, содержащая кодовую точку 0391
"который отличается от вышеупомянутого.