Заменитель строки

1

Я сохранил script в кодировке UTF-8.

Я изменил свою кодовую страницу на окна до 65001.

Я на python 2.6

Script # 1

# -*- coding: utf-8 -*-
print u'Español'
x = raw_input()

Script # 2

# -*- coding: utf-8 -*-
a = 'Español'
a.encode('utf8')
print a
x = raw_input()

Script # 1, печатает слово "штраф" без ошибок, script # 2 делает ошибку:

UnicodeDecodeError: кодек 'ascii' не может декодировать байт 0xf1 в позиции 4: порядковый номер не в диапазоне (128)

Я хочу иметь возможность печатать эту переменную без ошибок динамически, как в script # 2. кодировка (utf8) была упомянута мне как эквивалент выполнения u'string '

Очевидно, это не потому, что оно порождает ошибки. Как я могу это сделать?

  • 0
    Это потому , что вы не предварять строку с u ? Я привык к Python 3.
  • 0
    Да, я специально не предвосхищал тебя. Я пытался доказать, что то же самое можно сделать с динамической переменной, например, если вы читаете строки из файла, например.
Показать ещё 1 комментарий
Теги:
utf-8

2 ответа

7

Измените код на следующее:

# -*- coding: utf-8 -*-
a = 'Español'
a = a.decode('utf8')
print a
x = raw_input()

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

Проблема заключается в том, что python хранит строку в виде списка байтов, независимо от кодировки файла. Важно то, как эти байты читаются, и это то, что мы делаем, когда используем decode() и u''.

4

Для script # 2:

a = 'Español'           # In Python2 this is a string of bytes
a = a.decode('utf-8')   # This converts it to a unicode string
print(a)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню