Ответы:
Вы правы, см. 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