Как эти строки представлены внутри интерпретатора Python? Я не понимаю

# -*- coding: utf-8 -*- a = 'éáűőúöüó€' print type(a) # <type 'str'> print a # éáűőúöüó€ print ord(a[-1]) # 172 

Почему это работает? Не должно быть этого SyntaxError: Non-ASCII character '\xc3' in file ... ? В строке есть литералы unicode.

Когда я префикс его с u , результаты разные:

 # -*- coding: utf-8 -*- a = u'éáűőúöüó€' print type(a) # <type 'unicode'> print a # éáűőúöüó€ print ord(a[-1]) # 8364 

Зачем? В чем разница между внутренними представлениями в python? Как я могу сам это увидеть? 🙂

One Solution collect form web for “Как эти строки представлены внутри интерпретатора Python? Я не понимаю”

В строке есть литералы Unicode

Нет, здесь нету. В строке есть байты. Python просто идет с байтами, которые ваш редактор хранит на диске при создании файла.

Когда вы префикс строки с помощью u'' , вы указали на python, что вместо этого вы создаете объект unicode . Теперь Python обращает внимание на кодировку, указанную в верхней части исходного файла, и декодирует байты в исходном файле объекту unicode на основе указанной вами кодировки.

В обоих случаях ваш редактор сохранил последовательность байтов в файле, для символа , кодировка UTF-8 – это три байта, представленные в шестнадцатеричном виде как E282AC. Таким образом, последний байт в байтовом выражении является AC или 172 десятичным. После того, как вы декодируете последние 3 байта как UTF-8, они вместе станут кодовым номером Unicode U + 20AC, который равен 8364 в десятичной системе.

Вы действительно должны прочитать на Python и Unicode:

  • Юникод Python HOWTO

  • Прагматический Юникод от Нед Батчелдер

  • Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без оправданий!) Джоэл Спольски

  • Преобразование CSV в YAML, с Unicode?
  • кодировать и декодировать строку байтов python
  • Python: конвертировать Unicode в ASCII без ошибок для файла CSV
  • Как определить длину байта строки, кодированной utf-8, в Python?
  • Python 3 UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x9d
  • Как вы можете сделать предупреждение python 2.x при принуждении строк к unicode?
  • Python с проблемами юникода MySql
  • Python UnicodeDecodeError - Я неправильно понимаю кодировку?
  • Python - лучший язык программирования в мире.