Ответы:
Вы правы, см. 3.1.3. Юникод Строки .
Это был синтаксис начиная с Python 2.0.
Python 3 сделал их избыточными, так как тип строки по умолчанию - Unicode. Версии 3.0–3.2 удалили их, но они были повторно добавлены в 3.3+ для совместимости с Python 2 для облегчения перехода с 2 на 3.
ur"string"
) допустимо в Python 2, но, к сожалению, это неверный синтаксис в Python 3.
Значение u in u'Some String'
означает, что ваша строка является строкой Unicode .
Q: Я очень спешу и попал сюда из Поиска Google. Я пытаюсь записать эти данные в файл, я получаю сообщение об ошибке, и мне нужно самое простое, возможно, ошибочное решение в эту секунду.
A: Вам действительно следует прочитать статью Абсолютного минимума, которую каждый Джоэл разрабатывает абсолютно, положительно должен знать о Юникоде и наборах символов (без извинений!) О наборах символов.
Q: сри без кода времени, пожалуйста
Штраф. попробуйте str('Some String')
или 'Some String'.encode('ascii', 'ignore')
. Но вы действительно должны прочитать некоторые ответы и обсуждение Преобразования строки Unicode и этого превосходного, отличного учебника по кодированию символов.
Я думаю, что это означает «Юникод», это правильно?
Да.
Если да, то с каких пор это доступно?
Python 2.x.
В Python 3.x строки по умолчанию используют Unicode, и u
префикс не нужен . Примечание: в Python 3.0-3.2, u является синтаксической ошибкой. В Python 3.3+ снова разрешено писать 2/3 совместимых приложений.
u
префикс.
six.text_type()
повсеместно для (надеюсь, крошечного) числа людей, все еще использующих 3. [012] - по крайней мере, информация там, чтобы вы могли выбрать.
Я пришел сюда, потому что у меня был синдром смешного чарса на моем requests
выходе. Я думал, response.text
что даст мне правильно декодированную строку, но в выводе я нашел смешные двойные символы, где должны были быть немецкие умлауты.
Оказывается, response.encoding
было как-то пусто, и поэтому response
не знал, как правильно декодировать контент, и просто рассматривал его как ASCII (я думаю).
Мое решение состояло в том, чтобы получить необработанные байты с помощью «response.content» и применить вручную decode('utf_8')
их. Результатом было schöne Umlaute.
Правильно декодированный
мех
против неправильно декодированных
fĂźr
Все строки, предназначенные для людей, должны использовать "".
Я обнаружил, что следующий подход очень помогает при работе со строками Python: Все строки манифеста Python должны использовать u""
синтаксис. ""
Синтаксис для байтовых массивов, только.
Прежде чем начать избиение, позвольте мне объяснить. Большинство программ Python начинаются с использования ""
для строк. Но тогда им нужно поддерживать документацию из Интернета, чтобы они начали использовать"".decode
и внезапно они получают исключения везде о декодировании того или иного - все из-за использования ""
для строк. В этом случае Unicode действует как вирус и может нанести ущерб.
Но если вы будете следовать моему правилу, у вас не будет этой инфекции (потому что вы уже будете заражены).
bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
u""
.
Это Юникод.
Просто поместите переменную между ними str()
, и она будет работать нормально.
Но если у вас есть два списка, как показано ниже:
a = ['co32','co36']
b = [u'co32',u'co36']
Если вы проверите set(a)==set(b)
, это будет ложным, но если вы сделаете следующее:
b = str(b)
set(a)==set(b)
Теперь результат будет True.
str()
или u'€'.encode()
) без передачи кодировки. Если строка содержит не ASCII, пользователь получит исключение UnicodeEncodeException.
b = str(b)
просто дает строку repr()
списка, то есть b = "[u'co32', u'co36']"
. Тогдаset(a)==set(b) = False