Странная проблема с юникодом - PullRequest
1 голос
/ 26 ноября 2011

У меня следующая проблема. Если я запускаю свое приложение в Eclipse, оно работает нормально, но когда я запускаю его в автономном отладчике, я получаю следующую ошибку:

UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ u0144' в позиции 7: порядковый номер не в диапазоне (128)

Как я могу это исправить?

Мой фрагмент кода:

x = x.replace("Ł", "L")

Ответы [ 2 ]

3 голосов
/ 27 ноября 2011

Угадайте, основываясь на (недостаточной) предоставленной информации:

Вы используете Python 2.x.

[Угадай] x - это str объект.

[Guess] Eclipse устанавливает кодировку по умолчанию в UTF-8.

«Стандартный отладчик» устанавливает кодировку по умолчанию ascii.

Результат: сплат.

Решение (стандартная процедура работы с Unicode):

  • При вводе преобразуйте все str объекты в `Unicode '.
  • Работа в Юникоде.
  • На выходе закодируйте все unicode объекты, используя любую кодировку Ожидается потребитель продукции.

Важное обновление На самом деле, если x был объектом str в кодировке UTF-8, вы должны получить сообщение типа UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 7: etc etc.

Обратите внимание, что ваше фактическое сообщение об ошибке гласит UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: etc etc Это указывает на то, что все, на что он жалуется, имеет (a) объект unicode (b) длиной не менее 8 символов. Однако в действительности вы говорите, что x не является объектом unicode (в противном случае x.decode ('utf8') потерпит неудачу), а другие два аргумента replace имеют длину только 1 символ. Следовательно, мы имеем невозможность.

Чтобы помочь решить эту проблему:

print type(x), repr(x) # for Python 2.x
Lstroke = "Ł"
print type(Lstroke), repr(Lstroke)
y = x.replace(Lstroke, 'L')

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

Кстати: u '\ u0144' - ЛАТИНСКИЙ МАЛЕНЬКИЙ БУКВ N с ОСТРОМ; эта информация помогает вообще?

2 голосов
/ 26 ноября 2011

Попробуйте добавить # -*- coding: utf-8 -*- в начало файла, чтобы интерпретатор Python знал, какую кодировку использует файл, в моем примере UTF-8. Вы также можете сделать это, сохранив файл с заголовком BOM . Не уверен, как Eclipse намекает на кодировку, но, может быть, они как-то используют sys.setdefaultencoding().

Вы можете прочитать более подробную информацию в руководстве по Python о кодировке исходного кода .

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