2015-05-03 1 views
0

когда изучающие unicode от python document, я пытаюсь воспроизвести следующий примерпроблемы Юникода строки в Python

>>> ur'Hello\u0020World !' 
    u'Hello World !' 
>>> ur'Hello\\u0020World !' 
u'Hello\\\\u0020World !' 

Я использую PyCharm как редактор, версия Python 2.7, однако, что я получаю

>>>ur'Hello\u0020World !' 
Hello World ! 
>>>ur'Hello\\u0020World !' 
Hello\\u0020World ! 

Я не знаю, почему второй отличается от того, что сказал документ Python. Что вызвало разницу?

+0

Возможный дубликат [Что конкретно делают флаги строки «u» и «r» в Python, а также то, что является сырыми строковыми литералами?] (Http://stackoverflow.com/questions/2081640/what-exactly-do- u-and-r-string-flags-do-in-python-and-what-are-raw-string-l) – RafaelC

+0

Вы печатаете свой выход? Вообще говоря, экранированный символ имеет разные 'str' и' repr'. Python-интерпретатор пользователя 'repr' в вашем случае, но при его печати используется строковое представление. –

+0

Да, я распечатал его. – user785099

ответ

0

Обратите внимание, что в первом случае напечатанный результат цитируется как «u'hello ....» « Это означает, что он печатает строковый литерал на языке Python. Префикс «r» позволяет помещать обратную косую черту в строку, не вытаскивая ее. Поскольку результат равен только «u», каждый обратный слэш должен быть экранирован.

Во втором случае вывод не цитируется, поэтому он является самой строкой, а не строковым литералом, как это было бы в исходном коде Python. Это точно показывает, что такое строка, а не строка, поскольку она должна быть закодирована в исходный код Python.