KOI8-R: возникают проблемы с переводом строки - PullRequest
2 голосов
/ 15 июня 2009

Этот скрипт Python транслируется для русских букв:

s = u'Код Обмена Информацией, 8 бит'.encode('koi8-r')
print ''.join([chr(ord(c) & 0x7F) for c in s]) # kOD oBMENA iNFORMACIEJ, 8 BIT

Это работает. Но я хочу изменить это так, чтобы получить пользовательский ввод. Теперь я застрял в этом:

s = raw_input("Enter a string you want to translit: ")

s = unicode(s)
s = s.encode('koi8-r')

print ''.join([chr(ord(c) & 0x7F) for c in s])

Заканчиваем это:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)

Что не так?

Ответы [ 3 ]

2 голосов
/ 15 июня 2009

s = unicode(s) ожидает кодировку ascii по умолчанию. Вам необходимо указать кодировку, в которой находится ваш ввод, например, s = unicode(s, 'utf-8').

1 голос
/ 15 июня 2009

try unicode(s, encoding), где используется кодировка вашего терминала.

0 голосов
/ 16 июня 2009

Глядя на сообщения об ошибках, которые вы видите, мне кажется, что кодировка вашего терминала, вероятно, установлена ​​на KOI8-R, и в этом случае вам не нужно выполнять никакого декодирования входных данных. Если это так, то все, что вам нужно, это:

>>> s = raw_input("Enter a string you want to translit: ")
>>> print ''.join([chr(ord(c) & 0x7F) for c in s])
kOD oBMENA iNFORMACIEJ, 8 BIT

Вы можете дважды проверить это с помощью s.decode('koi8-r'), что должно завершиться успешно и вернуть эквивалентную строку в кодировке Unicode.

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