/ / jak niezawodnie dekodować różne kodowania do domyślnego kodowania systemu - python, kodowanie znaków

jak niezawodnie dekodować różne kodowania do domyślnego kodowania systemowego - python, kodowanie znaków

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 № 1

Posł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.)