Próbuję pracować z kilkoma dokumentami, które wszystkie mają różne kodowania - niektóre utf-8, niektóre ISO-8859-2, niektóre ascii itp. Czy istnieje niezawodny sposób dekodowania do standardowego kodowania do przetwarzania?
Próbowałem następujące:
import chardet
encoding = chardet.detect(text)
text = unicode(text,encoding["encoding"]).decode(sys.getdefaultencoding(),"ignore")
Z powyższym kodem nadal otrzymuję błędy UnicodeEncodeError
Odpowiedzi:
3 dla odpowiedzi № 1Posługiwać się decode
konwertować bajty na kod Unicode, i encode
aby przekonwertować kod Unicode na bajty:
text.decode(encoding["encoding"], "ignore").encode(sys.getdefaultencoding(), "ignore")
Chociaż zalecałbym przetwarzanie na samych obiektach unicode lub kodowanych utf-8, jeśli absolutnie potrzebujesz pracować z bajtami. sys.getdefaultencoding()
jest "ascii"
, który zapewnia bardzo ograniczony zestaw znaków. Zobacz też: http://wiki.python.org/moin/DefaultEncoding
0 dla odpowiedzi nr 2
Prawdopodobnie masz na myśli encode
:
u = unicode(text, encoding["encoding"], "ignore")
text = u.encode(sys.getdefaultencoding(), "ignore")
lub równoważnie i częściej,
u = text.decode(encoding["encoding"], "ignore")
text = u.encode(sys.getdefaultencoding(), "ignore")
Może chcesz ignore
na obu, jak wyżej: tekst przychodzący może zawierać nieprawidłowe znaki, powodując niepowodzenie dekodowania do Unicode i może zawierać znaki, które nie mogą być reprezentowane w domyślnym kodowaniu, co powoduje, że kodowanie się nie powiedzie (może nie chcesz ignorować błędy, ponieważ wygląda na to, że próbujesz obejść się używając niewłaściwej funkcji.)