Ответ 1
Django хранит строку unicode
с использованием кодовых точек и идентифицирует строку как unicode для дальнейшей обработки.
UTF-8 использует четыре кодировки 8-битных байтов, поэтому строка unicode
, используемая Django, должна быть декодирована или интерпретирована из нотации кода в ее нотации UTF-8 в какой-то момент.
Что касается Аландских островов, то, похоже, происходит то, что он принимает кодировку байтов UTF-8 и интерпретирует ее как кодовые точки для преобразования строки.
Строка django_countries возвращает, скорее всего, u'\xc5land Islands'
, где \xc5
- обозначение кодовой точки UTF для Å. В байтовой нотации UTF-8 \xc5
становится \xc3\x85
, где каждое число \xc3
и \x85
является 8-разрядным байтом. Видеть:
http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xc5&mode=hex
Или вы можете использовать country_label = fields.Country(form.cleaned_data.get('country') [0: 2]). name.encode('utf-8') для перехода от u'\xc5land Islands'
в '\xc3\x85land Islands'
Если вы берете каждый байт и используете его как кодовые точки, вы увидите, что он даст вам следующие символы: Ã…
Смотрите: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xc3&mode=hex
И: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=x85&mode=hex
См. фрагмент кода с html-обозначением этих символов.
<div id="test">Ã…Å</div>