Miałem pewne problemy z plikami napisów w wideo omxplayer. Aby go rozwiązać, musiałem przekonwertować kodowanie z systemu Windows-1250 na kodowanie UTF-8. Moje pytanie brzmi: jak mogę sprawdzić konkretny plik, którego kodowania się używa?
23
piconv
zmienić kodowanie;)Odpowiedzi:
Naprawdę nie możesz automatycznie dowiedzieć się, czy plik został pierwotnie zapisany z kodowaniem X.
Możesz jednak łatwo sprawdzić, czy cały plik można w jakiś sposób pomyślnie zdekodować (ale niekoniecznie poprawnie) przy użyciu określonego kodeka. Jeśli znajdziesz jakieś bajty, które nie są poprawne dla danego kodowania, musi to być coś innego.
Problem polega na tym, że wiele kodeków jest podobnych i ma takie same „prawidłowe wzorce bajtów”, po prostu interpretując je jako różne znaki. Na przykład
ä
kodowanie w jednym może odpowiadaćé
w innym lubø
w trzecim. Komputer tak naprawdę nie może wykryć, w jaki sposób interpretować bajt, powoduje, że tekst jest czytelny dla człowieka (chyba że dodasz słownik dla wszystkich języków i pozwoli ci sprawdzić pisownię ...). Musisz także wiedzieć, że niektóre zestawy znaków są tak naprawdę podzestawami innych, jak np. Kodowanie ASCII jest częścią najczęściej używanych kodeków, takich jak niektóre rodziny ANSI lub UTF-8. Oznacza to na przykład tekst zapisany jako UTF-8, który zawiera tylko proste znaki łacińskie, byłby identyczny z tym samym plikiem zapisanym jako ASCII.Wróćmy jednak od wyjaśnienia, czego nie możesz zrobić, do tego, co możesz zrobić:
Aby przeprowadzić podstawowe sprawdzenie plików tekstowych ASCII / innych niż ASCII (zwykle UTF-8), możesz użyć
file
polecenia. Nie zna jednak wielu kodeków i sprawdza tylko kilka pierwszych KB pliku, zakładając, że reszta nie będzie zawierała żadnych nowych znaków. Z drugiej strony rozpoznaje także inne popularne typy plików, takie jak różne skrypty, dokumenty HTML / XML i wiele formatów danych binarnych (co nie jest interesujące przy porównywaniu plików tekstowych) i może wydrukować dodatkowe informacje, czy są to wyjątkowo długie linie, czy co stosowany jest typ sekwencji nowej linii (np. UNIX: LF, Windows: CR + LF).Jeśli to nie wystarczy, mogę zaoferować ci skrypt Pythona, który napisałem dla tej odpowiedzi tutaj , który skanuje pełne pliki i próbuje je odkodować przy użyciu określonego zestawu znaków. Jeśli się powiedzie, to kodowanie jest potencjalnym kandydatem. W przeciwnym razie, jeśli istnieją bajty, których nie można dekodować, można usunąć ten zestaw znaków z listy.
źródło
Nazwany program
file
może to zrobić. Przykład:Jeśli interesuje Cię jak to się robi zobacz
src/encoding.c
.źródło
file
zgaduje i często nie jest to zbyt dobry pomysł. Na przykład w moich testach błędnie zidentyfikował zarówno MacRoman, jak i CP-1252 jako ISO-8859, w wyniku czego „š” i „ß” zostały zakodowane..sql
pliku ifile
pokazałem, że to rzeczywiściegzip
plik skompresowany!