Czy istnieje uniwersalna metoda wykrywania zestawu znaków? Używam tagów IPTC użytkownika i nie znam żadnego kodowania. Muszę to wykryć, a następnie zmienić je na utf-8.Python - wykryj zestaw znaków i przekonwertuj na utf-8
Ktoś może pomóc?
Czy istnieje uniwersalna metoda wykrywania zestawu znaków? Używam tagów IPTC użytkownika i nie znam żadnego kodowania. Muszę to wykryć, a następnie zmienić je na utf-8.Python - wykryj zestaw znaków i przekonwertuj na utf-8
Ktoś może pomóc?
Chcesz użyć chardet
, detektor kodowania
To nie działa, podważam to zanim zapytam tutaj. Niektóre łańcuchy otrzymują kodowanie None, ale nie jest to prawdą. Tagi są zakodowane w jakiś sposób, ponieważ na 1 portalu internetowym są rozpoznawane. – robos85
+1: chardet wydaje się być jednym z najlepszych sposobów wykrywania kodowania. @ robos85: Nie można wykonać doskonałego wykrywania kodowania: http://stackoverflow.com/questions/436220/python-is-there-a-way-to-etetine-tode-encoding-of-text-file/ 436299 # 436299. – EOL
Opracowałem znacznie skuteczniejszy sposób wykrywania kodowania, oparty na znajomości języka. Otrzymuje 8-bitowe kodowanie w prawo. Wreszcie. – tchrist
To trochę późno, ale jest też inne rozwiązanie: spróbuj użyć pyicu.
Przykład:
import icu
def convert_encoding(data, new_coding='UTF-8'):
coding = icu.CharsetDetector(data).detect().getName()
if new_coding.upper() != coding.upper():
data = unicode(data, coding).encode(new_coding)
return data
pyicu oparty na OIOM, a czasem zabraknie wykrywa jakieś kodowanie: http://sourceforge.net/p/icu/mailman/icu-design/thread/[email protected]com/ – coanor
@coanor: * dowolny wykrywacz kodowania zawodzi w niektórych przypadkach, ponieważ nie ma możliwości dokładnego określenia kodowania dla wszystkich testów – MestreLion
Jeśli chcesz to zrobić z cchardet, można użyć tej funkcji.
import cchardet
def convert_encoding(data, new_coding = 'UTF-8'):
encoding = cchardet.detect(data)['encoding']
if new_coding.upper() != encoding.upper():
data = data.decode(encoding, data).encode(new_coding)
return data
Patrząc na swoim komentarzu do @Ignacio, chciałbym zaprosić was do wklejenia kilka przykładów „none” ciąg na swoje pytanie, tak, że możemy bawić się z nimi i zrozumieć na czym polega problem. Byłoby pomocne, gdybyś mógł również wkleić ich poprawną dekodowaną wersję, jak to zrobiono na portalu, o którym wspomniałeś. – mac