Какой у вас префикс в строке Python? - PullRequest
187 голосов
/ 17 марта 2010

Как в:

u'Hello'

Я предполагаю, что это означает "Unicode", это правильно?

Если да, то с каких это пор?

Ответы [ 7 ]

111 голосов
/ 24 мая 2013

Значение u в u'Some String' означает, что ваша строка является строкой Unicode .

В: Я ужасно тороплюсь и попал сюда из Поиска Google. Я пытаюсь записать эти данные в файл, получаю сообщение об ошибке, и мне нужно самое простое, возможно, ошибочное решение в эту секунду.

A: Вам действительно следует прочитать * 1011 Джоэла * Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о юникоде и наборах символов (никаких оправданий!) эссе о наборах символов.

Q: сри без кода времени, пожалуйста

A: Отлично. попробуйте str('Some String') или 'Some String'.encode('ascii', 'ignore'). Но вы действительно должны прочитать некоторые ответы и обсудить Преобразование строки Unicode и это отлично, отлично, учебник по кодированию символов.

106 голосов
/ 17 марта 2010

Ты прав, см. 3.1.3. Unicode Strings .

Это был синтаксис начиная с Python 2.0.

Python 3 сделал их избыточными, так как тип строки по умолчанию - Unicode. Версии с 3.0 по 3.2 удалили их, но они были повторно добавлены в 3.3 + для совместимости с Python 2 для облегчения перехода с 2 на 3.

50 голосов
/ 17 марта 2010

Я предполагаю, что это означает "Юникод", это правильно?

Да.

Если да, то с каких это пор?

Python 2.x.

В Python 3.x строки по умолчанию используют Юникод, и префикс u не требуется. Примечание: в Python 3.0-3.2, u является синтаксической ошибкой. В Python 3.3+ снова разрешено писать 2/3 совместимых приложений.

2 голосов
/ 09 декабря 2014

Это Unicode.

Просто поместите переменную между str(), и она будет работать нормально.

Но если у вас есть два списка, как показано ниже:

a = ['co32','co36']
b = [u'co32',u'co36']

Если вы отметите set(a)==set(b), оно станет False, но если вы сделаете следующее:

b = str(b)
set(a)==set(b)

Теперь результат будет True.

2 голосов
/ 17 марта 2010

Все строки, предназначенные для людей, должны использовать "".

Я обнаружил, что следующий подход очень помогает при работе со строками Python: Все Строки манифеста Python должны использовать синтаксис u"". Синтаксис "" предназначен только для байтовых массивов.

Прежде чем начать избиение, позвольте мне объяснить. Большинство программ на Python начинаются с использования "" для строк. Но затем им нужно поддерживать документацию из Интернета, поэтому они начинают использовать "".decode, и внезапно они везде получают исключения в отношении декодирования того и другого - все из-за использования "" для строк. В этом случае Unicode действует как вирус и может нанести ущерб.

Но, если вы будете следовать моему правилу, у вас не будет этой инфекции (потому что вы уже будете заражены).

2 голосов
/ 17 марта 2010

Должно помочь следующее:

http://docs.python.org/library/functions.html#unicode

http://www.amk.ca/python/howto/unicode (перейдите к «Поддержка Unicode в Python», если вы уже знакомы с принципами Unicode)

1 голос
/ 14 ноября 2017

Я пришел сюда, потому что у меня был requests синдром смешного чарса. Я думал, что response.text даст мне правильно декодированную строку, но в выводе я нашел забавные двойные символы, где должны были быть немецкие умлауты.

Оказывается, response.encoding был каким-то образом пустым, поэтому в ответе не знали, как правильно декодировать контент, и просто рассматривал его как ASCII (наверное).

Моим решением было получить необработанные байты с параметром response.content и вручную применить decode('utf_8') к нему. В результате получилось schöne Umlaute.

Правильно декодированный

für

против. неправильно расшифрованный

fĂźr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...