Я работаю над Python script, который использует ножничный символ (9986 - ✂), и я пытаюсь перенести свой код на Mac, но я столкнулся с этой ошибкой.
При работе от IDLE (Python 3.2.5 - OS X 10.4.11 iBook G4 PPC) символ дескриптора отображается отлично, и код работает полностью на Ubuntu 13.10, но когда я пытаюсь запустить это в терминале, я получаю эта ошибка/трассировка:
Traceback (most recent call last):
File "snippets-convert.py", line 352, in <module>
main()
File "snippets-convert.py", line 41, in main
menu()
File "snippets-convert.py", line 47, in menu
print ("|\t ",snipper.decode(),"PySnipt'd",snipper.decode(),"\t|")
UnicodeEncodeError: 'ascii' codec can't encode character '\u2702' in position 0: ordinal not in range(128)
и код, который дает мне проблему:
print ("|\t ",chr(9986),"PySnipt'd",chr(9986),"\t|")
Не означает ли этот сигнал, что терминал не может отображать этот символ? Я знаю, что это старая система, но в настоящее время это единственная система, которую я должен использовать. Может ли возраст ОС мешать программе?
Я прочитал следующие вопросы:
-
UnicodeEncodeError: кодек ascii не может кодировать символ u '\ xef' в позиции 0: порядковый номер не в диапазоне (128) - различный символ
-
"кодек UnicodeEncodeError: 'ascii' не может кодировать символ" - использовать 2.6, поэтому не знаю, применяется ли оно
-
UnicodeEncodeError: кодек ascii не может кодировать символ? - Кажется, это правдоподобное решение моей проблемы,
.encode('UTF-8')
, я не знаю, t получить ошибку. Однако он отображает код символа, а не тот, который я хочу, и.decode()
просто дает мне ту же ошибку. Не уверен, что я делаю это правильно. -
UnicodeEncodeError: кодек ascii не может кодировать символы в позиции 0-6: порядковый номер не в диапазоне (128) - не уверен, что это применимо, он использует GUI, получает вход и все на греческом языке.
Что вызывает эту ошибку? Является ли это временем системы/ОС, версией Python или некоторой ошибкой программирования?
ИЗМЕНИТЬ: Эта ошибка появляется позже с этой повторяющейся проблемой (просто подумал, что я добавлю ее, поскольку она находится в одной программе и является той же ошибкой):
Traceback (most recent call last):
File "snippets-convert.py", line 353, in <module>
main()
File "snippets-convert.py", line 41, in main
menu()
File "snippets-convert.py", line 75, in menu
main()
File "snippets-convert.py", line 41, in main
menu()
File "snippets-convert.py", line 62, in menu
search()
File "snippets-convert.py", line 229, in search
print_results(search_returned) # Print the results for the user
File "snippets-convert.py", line 287, in print_results
getPath(toRead) # Get the path for the snippet
File "snippets-convert.py", line 324, in getPath
snipXMLParse(path)
File "snippets-convert.py", line 344, in snipXMLParse
print (chr(164),child.text)
UnicodeEncodeError: 'ascii' codec can't encode character '\xa4' in position 0: ordinal not in range(128)
EDIT:
Я зашел в настройки символа терминала и фактически поддерживает этот символ (как вы можете видеть на этом скриншоте:
когда я вставляю его в терминал, он выводит это: \342\234\202
, и когда я нажимаю Enter, я получаю следующее: -bash: ✂: command not found
EDIT Команды Ran как @J.F. Себастьян спросил:
python3 test-io-encoding.py
:
PYTHONIOENCODING: None
locale(False): US-ASCII
device(stdout): US-ASCII
stdout.encoding: US-ASCII
device(stderr): US-ASCII
stderr.encoding: US-ASCII
device(stdin): US-ASCII
stdin.encoding: US-ASCII
locale(False): US-ASCII
locale(True): US-ASCII
python3 -S test-io-encoding.py
:
PYTHONIOENCODING: None
locale(False): US-ASCII
device(stdout): US-ASCII
stdout.encoding: US-ASCII
device(stderr): US-ASCII
stderr.encoding: US-ASCII
device(stdin): US-ASCII
stdin.encoding: US-ASCII
locale(False): US-ASCII
locale(True): US-ASCII
EDIT Пробовал "хакерское" решение, предоставленное @PauloBu:
Как вы можете видеть, это вызвало одно (Yay!) scissor, но теперь я получаю новую ошибку. Traceback/ошибка:
+-=============================-+
✂Traceback (most recent call last):
File "snippets-convert.py", line 357, in <module>
main()
File "snippets-convert.py", line 44, in main
menu()
File "snippets-convert.py", line 52, in menu
print("|\t "+sys.stdout.buffer.write(chr(9986).encode('UTF-8'))+" PySnipt'd "+ sys.stdout.buffer.write(chr(9986).encode('UTF-8'))+" \t|")
TypeError: Can't convert 'int' object to str implicitly
EDIT Добавлены результаты исправления @PauloBu:
+-=============================-+
|
✂ PySnipt'd
✂ |
+-=============================-+
ИЗМЕНИТЬ
И его исправление для его исправления:
+-=============================-+
✂✂| PySnipt'd |
+-=============================-+