UnicodeEncodeError: kodek „ascii” nie może kodować znaku w pozycji 0: porządkowa nie w zakresie (128)

Pracuję nad skryptem Pythona, który używa znaku nożycowego (9986 - ✂) i próbuję przenieść mój kod do Maca, ale napotykam na ten błąd.

Znak nożycowy pojawia się dobrze, gdy uruchamia się z IDLE (Python 3.2.5 - OS X 10.4.11 iBook G4 PPC), a kod działa całkowicie dobrze na Ubuntu 13.10, ale gdy próbuję uruchomić to w terminalu, otrzymuję ten błąd / traceback:

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)

i kod, który daje mi problem:

print ("|\t ",chr(9986),"PySnipt'd",chr(9986),"\t|")

Czy to nie oznacza, że ​​terminal nie ma możliwości wyświetlenia tego znaku? Wiem, że to stary system, ale obecnie jest to jedyny system, którego muszę użyć. Czy wiek systemu operacyjnego może zakłócać działanie programu?

Przeczytałem o tych pytaniach:

UnicodeEncodeError: kodek „ascii” nie może kodować znaku u „ef ”w pozycji 0: porządkowa nie w zakresie (128) - Inny charakter

„UnicodeEncodeError: 'ascii' kodek nie może kodować znaków” - Używając 2.6, więc nie wiem, czy ma to zastosowanie

UnicodeEncodeError: Kodek „ascii” nie może kodować znaków? - Wydaje się być wiarygodnym rozwiązaniem mojego problemu,.encode('UTF-8'), Nie rozumiem błędu. Jednak wyświetla kod postaci, a nie postać, którą chcę i.decode() po prostu daje mi ten sam błąd. Nie jestem pewien, czy robię to dobrze.

UnicodeEncodeError: kodek „ascii” nie może kodować znaków w pozycji 0-6: porządkowa nie mieści się w zakresie (128) - Nie jestem pewien, czy ma to zastosowanie, używa GUI, pobiera dane wejściowe i wszystko w języku greckim.

Co powoduje ten błąd? Czy to jest wiek systemu / OS, wersja Pythona, czy jakiś błąd programistyczny?

EDYTOWAĆ: Ten błąd pojawia się później z tym zduplikowanym problemem (pomyślałem, że dodam go, ponieważ jest w tym samym programie i jest ten sam błąd):

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)

EDYTOWAĆ:

Poszedłem do ustawień znaków terminalu i faktycznie obsługuje on tę postać (jak widać na tym zrzucie ekranu:

po włożeniu go do terminala drukuje to:\342\234\202 i kiedy naciskamWchodzić Rozumiem:-bash: ✂: command not found

EDYTOWAĆ Polecenia Ran jako @ J.F. Sebastian zapytał:

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

EDYTOWAĆ Próbowałem rozwiązania „hackerskiego” dostarczonego przez @PauloBu:

Jak widać, spowodowało to jeden nożycowy (Yay!), Ale teraz otrzymuję nowy błąd. Śledzenie / błąd:

+-=============================-+
✂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

EDYTOWAĆ Dodano wyniki poprawki @ PauloBu:

+-=============================-+
|
✂ PySnipt'd 
✂       |
+-=============================-+

EDYTOWAĆ:

I jego poprawka do jego poprawki:

+-=============================-+
✂✂|       PySnipt'd     |
+-=============================-+

questionAnswers(4)

yourAnswerToTheQuestion