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