pojawia się błąd w systemie produkcyjnym, które nie rozmnażają się w środowisku programistycznym:Jak odtworzyć UnicodeEncodeError?
with io.open(file_name, 'wt') as fd:
fd.write(data)
Wyjątek:
File "/home/.../foo.py", line 18, in foo
fd.write(data)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 6400: ordinal not in range(128)
ja już próbował, ale wiele dziwnych znaków w zmiennej data
.
Jednak do tej pory nie udało mi się odtworzyć modelu UnicodeEncodeError
.
Co musi być w data
, aby uzyskać UnicodeEncodeError
?
Aktualizacja
python -c 'import locale; print locale.getpreferredencoding()'
UTF-8
Update2
Jeśli wywołać locale.getpreferredencoding()
przez powłokę i poprzez żądanie strony internetowej, kodowanie jest "UTF-8".
Zaktualizowałem obsługę wyjątków w moim kodzie i zapisałem numer getpreferredencoding()
od kilku dni. Teraz stało się to ponownie (do tej pory nie mogę tego wymusić ani odtworzyć), a kodowanie to "ANSI_X3.4-1968"!
nie mam pojęcia, gdzie to kodowanie pobiera ustawiony ....
Stawia to mój problem w innym kierunku. Pozostawienie tego pytania bezużytecznym. Mój problem jest teraz: Gdzie zmienia się preferowane kodowanie? Ale to nie jest część tego pytania.
Wielkie podziękowania dla wszystkich, którzy
wiesz, bez żadnych dodatkowych informacji, które pozwala nam odtworzyć problemu (wiecie, [MCVE]), nie istnieją żadne inne odpowiedzi dać. Jestem bardzo sceptyczny, że * tylko z kodem, który pokazałeś *, że 'locale.getpreferredencoding()' jest naprawdę UTF-8 * kiedy trafisz ten błąd *. –
Można również po prostu sprawdzić kodowanie wybrane dla pliku; 'io.TextIOWrapper' ma atrybut" kodowania ". W tym konkretnym przypadku zostanie ustawiony na ASCII. –