кодировка в python: тип переменной - PullRequest
1 голос
/ 21 марта 2011

Python файл

# -*- coding: UTF-8 -*-
a = 'Köppler'
print a
print a.__class__.__name__
mydict = {}
mydict['name'] = a
print mydict
print mydict['name']

Выход:

Köppler
str
{'name': 'K\xc3\xb6ppler'}
Köppler

Кажется, что имя остается прежним, но только при печати словаря я получаю эту странную экранированную строку символов. На что я тогда смотрю? Это представление UTF-8?

Ответы [ 4 ]

5 голосов
/ 21 марта 2011

Причиной такого поведения является то, что функция __repr__ в Python 2 экранирует символы не-ASCII-юникода . Как показывает ссылка, это исправлено в Python 3.

4 голосов
/ 21 марта 2011

Да, это UTF-8 представление ö (U + 00F6 МАЛЕНЬКОЕ ПИСЬМО О С ДИАРЕЗОМ).Он состоит из октета 0xC3, за которым следует октет 0xB6. UTF-8 - это очень элегантная кодировка, я думаю, которую стоит прочитать.История его дизайна (на подставке для столовой в закусочной) описана здесь Робом Пайком .

1 голос
/ 21 марта 2011

Насколько мне известно, в Python есть два метода для отображения объектов: str () и repr (). Str () используется внутри печати, однако, очевидно, что dict str () использует repr () для ключей и значений.

Как уже упоминалось: repr () экранирует символы Юникода.

0 голосов
/ 21 марта 2011

Кажется, вы используете Python 2.x, где вы должны указать, что объект на самом деле является строкой Unicode, а не простой ASCII.Вы указали, что code - это utf-8, таким образом, вы фактически набрали 2 байта для своего ö, и, поскольку это обычная строка, вы получили 2 экранированных символа.Попробуйте указать юникод a= u'Köppler'.Возможно, вам придется закодировать его перед печатью, в зависимости от вашей кодировки: print a.encode('utf-8')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...