Piszę aplikację, która pobiera ogromne ilości tekstów jako dane wejściowe, które mogą być w dowolnym kodowaniu znaków, i chcę je zapisać w UTF-8. Nie otrzymam lub nie mogę zaufać kodowaniu znaków, które jest zdefiniowane za pomocą danych (jeśli istnieją).Wykrywanie kodowania w Pythonie, użyj biblioteki chardet czy nie?
Przez jakiś czas używałem chardeta biblioteki Pythons do wykrywania oryginalnego kodowania znaków, http://pypi.python.org/pypi/chardet, ale ostatnio pojawiły się pewne problemy, w których zauważyłem, że nie obsługuje on kodowania skandynawskiego (na przykład iso-8859-1). Poza tym zajmuje dużo czasu/CPU/mem, aby uzyskać wyniki. ~ 40s dla pliku tekstowego o wielkości 2 MB.
Próbowałem tylko przy użyciu standardowego pliku Linux
file -bi name.txt
I z wszystkich moich plików dotychczas zapewnia mnie z wynikiem 100%. A to z ~ 0.1s dla pliku 2 MB. Obsługuje również skandynawskie kodowanie znaków.
Sądzę, że zalety korzystania z pliku są oczywiste. Jakie są wady? Czy czegoś brakuje?
Jeśli jest w 100% dokładny, to zastanawiam się, dlaczego ktoś go nie zaimplementował (lub "chardet") używając tych samych reguł, których używa 'plik' ... - czy próbowałeś' pliku' kontra 'chardet? 'porównanie ze znaczną ilością danych testowych? –
FWIW, ISO-8859-1 (i jego wersja, -15) to nie tylko skandynawski, jest używany do wielu innych skryptów łacińskich. Jeśli dane wejściowe to "głównie ASCII", a nie UTF-8, to ISO-8859-1 to całkiem niezły domysł. http://en.wikipedia.org/wiki/ISO/IEC_8859#The_Parts_of_ISO.2FIEC_8859 – Thomas
Jon, całkowicie się zgadzam. Stąd moje pytanie. Nie mam dostępu do wystarczającej ilości danych, które sprawiłyby, że to podejście byłoby statystycznie znaczące, więc odpowiedź na Twoje pytanie jest niestety niestety. – Niklas9