Строковые литералы 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"который отличается от вышеупомянутого.

Другие вопросы по тегам