исключение при печати акцентов на linux - PullRequest
0 голосов
/ 23 мая 2019

Я написал очень простой скрипт на python3.5, который отображает в консоли сообщение с функцией печати. ​​

Этот скрипт отлично работает на моем персональном компьютере.

Я загрузил вLinux, и я получаю это исключение:

UnicodeEncodeError: 'ascii' codec can't encode character '\xe8' in position 30: ordinal not in range(128)

Я не понимаю, почему он работает на моем компьютере, а не на целевом компьютере.

Спасибо

* РЕДАКТИРОВАТЬ *

Вот мой код:

print('hello world é è")

Ответы [ 3 ]

0 голосов
/ 23 мая 2019

попробуйте


a="hello world é è".encode("iso-8859-15")
print(a.decode("iso-8859-15"))
0 голосов
/ 24 мая 2019

Локаль в вашей среде Linux поддерживает только ASCII. Следовательно, вы получаете ошибку при попытке печати не-ASCII символов.

Лучший обходной путь для этого состоит в том, чтобы установить для переменной PYTHONIOENCODING значение UTF-8 или установить для переменной среды PYTHONUTF8 значение '1'. Например

$ PYTHONIOENCODING=UTF-8 python myprogram.py

Лучшее решение - установить локаль, поддерживающую UTF-8. Это можно сделать через меню региональных настроек операционной системы или изменив соответствующие файлы конфигурации (файлы могут отличаться в зависимости от дистрибутива). UTF-8 - это расширенный набор ASCII, поэтому изменение не должно вызывать каких-либо проблем (но в любом случае резервное копирование важных данных).

Также возможно вырезать не-ASCII-символы из строки перед печатью, но при таком подходе информация теряется. Символы, не входящие в ASCII, можно полностью удалить, игнорируя кодировка ошибки:

>>> s = 'hello world é è'
>>> print(s.encode('ascii', errors='ignore').decode())
hello world  

или функция unicodedata.normalize может использоваться для получения эквивалентного символа ASCII, если символ Unicode можно разложить на символ ASCII и акцент.

>>> print(ud.normalize('NFD', s).encode('ascii', errors='ignore').decode())
hello world e e
0 голосов
/ 23 мая 2019

Добавьте # -*- coding: utf-8 -*- поверх вашего файла

...