Відповіді:
Ви маєте рацію, див. 3.1.3. Unicode рядки .
Це був синтаксис з Python 2.0.
Python 3 зробив їх надмірними, оскільки типом рядка за замовчуванням є Unicode. Версії 3.0 до 3.2 видалили їх, але вони були знову додані в 3.3+ для сумісності з Python 2, щоб допомогти переходу 2 на 3.
ur"string"
) є дійсним у Python 2, але, на жаль, недійсний синтаксис у Python 3.
U u'Some String'
означає, що ваша рядок є рядком Unicode .
З: Я дуже страшно поспішаю, і я приземлився тут із Пошуку Google. Я намагаюся записати ці дані у файл, я отримую помилку, і мені потрібні мертві найпростіші, напевно, помилкові рішення цієї секунди.
Відповідь: Ви дійсно повинні читати абсолютний мінімум Джоеля, кожен розробник програмного забезпечення абсолютно, позитивно повинен знати про Unicode та набори символів (без виправдань!) Есе про набори символів.
Питання: sry no time code pls
Добре. спробуйте str('Some String')
або 'Some String'.encode('ascii', 'ignore')
. Але ви дійсно повинні прочитати деякі відповіді та обговорення щодо перетворення рядка Unicode і цей відмінний, відмінний буквар на кодування символів.
Я здогадуюсь, що він позначає "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
порівняно з неправильно розшифрованими
fĂźr
Усі рядки, призначені для людей, повинні використовувати u "".
Я виявив, що такий спосіб мислення дуже допомагає при роботі з рядками Python: Усі рядки маніфесту Python повинні використовувати u""
синтаксис. ""
Синтаксис для байтових масивів, тільки.
Перед тим, як починати базінг, дозвольте мені пояснити. Більшість програм Python починаються з використання ""
для рядків. Але тоді їм потрібно підтримувати документацію в Інтернеті, тож вони починають використовувати "".decode
і раптом вони отримують винятки скрізь з декодування цього і того - все через використання ""
для рядків. У цьому випадку Unicode дійсно діє як вірус і спричинить загрозу.
Але якщо ви будете дотримуватися мого правила, у вас не буде цієї інфекції (тому що ви вже будете заражені).
bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
u""
.
Це Unicode.
Просто поставте змінну між str()
, і вона буде добре працювати.
Але якщо у вас є два списки, такі:
a = ['co32','co36']
b = [u'co32',u'co36']
Якщо ви set(a)==set(b)
поставите прапорець , він з’явиться як помилковий, але якщо ви зробите наступне:
b = str(b)
set(a)==set(b)
Тепер результат буде правдою.
str()
або u'€'.encode()
), не передаючи кодування. Якщо рядок містить не-ASCII, користувач отримає UnicodeEncodeException.
b = str(b)
просто дає рядок repr()
списку, тобто b = "[u'co32', u'co36']"
. Потімset(a)==set(b) = False