Как эти строки представлены внутри интерпретатора 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 и наборах символов (без оправданий!) Джоэл Спольски

  • Python - пиражирование символов Юникода
  • Работа с ключами unicode в словаре python
  • Печать в терминале цветами с использованием Python?
  • Помогите мне понять, почему Unicode работает иногда с Python
  • Ошибка кодирования Unicode Beautiful Soup
  • Как печатать кортежи строк unicode на языке оригинала (не u'foo)
  • Преобразование формата unicode в формат datetime в формате strptime
  • pyPdf игнорирует новые строки в файле PDF
  • UnicodeEncodeError: кодек ascii не может кодировать символ
  • Python zlib output, как восстановить из таблицы mysql utf-8?
  • Ошибка декодирования Unicode Python при импорте matplotlib
  • Python - лучший язык программирования в мире.