Nie możesz podać kodowania pliku. Możesz tylko zgadnąć. Możesz w większości zgadywać, ale czasem domysły się nie udają. filejest przykładem programu zgadującego mądrze.
Marco
1
@Marco: Można jednak sprawdzić, czy jest to poprawny UTF-8, czy nie. Istnieje kilka kodowań, które mogą błędnie przejść jako poprawne UTF-8, ale prawie nigdy nie dzieje się to w przypadku kodowania / kodowania ISO-8859-𝒏 lub Windows-125𝒏.
user1686 24.09.2013
Odpowiedzi:
28
Możesz określić kodowanie pliku za pomocą następującego polecenia:
@nicolas W systemie MacOS możesz spróbować file -I filename(-I jest wielką literą i).
Rik
5
Czy to czyta cały plik?
ctrl-alt-delor
2
@ kojow7 utf-8 nie ma nagłówka. Czysty ASCII (tylko 7-bitowy), jest nie do odróżnienia od utf-8 (o to chodzi, nagłówek spowoduje różnego rodzaju problemy). Więc jeśli masz plik ASCII dla pierwszego MB, to ma on pojedynczy znak UTF-8, to nie będziesz wiedział, chyba że przeczytasz cały plik.
ctrl-alt-delor
3
Nie należy tego akceptować jako odpowiedzi. Komenda „plik” tego nie robi; czyta tylko część pliku i używa magicznych liczb, aby się domyślić. Czasami „plik” może i da ci błędną odpowiedź. Aby sprawdzić, czy plik przechodzi kodowanie takie jak ascii, iso-8859-1, utf-8 lub cokolwiek innego, dobrym rozwiązaniem jest użycie polecenia „iconv”.
@davidpostill Jestem ciekawy, czy złą praktyką jest cytowanie autora w referencji?
Pablo Olmos de Aguilera C.
Nie. Dobrą praktyką jest jednak, aby link mówił, dokąd mnie prowadzi. Załóżmy, że czytam tylko niebieski tekst. Po edycji mogę powiedzieć, dlaczego i kiedy powinienem to kliknąć. Przedtem nie mogłem. (To nie ja dokonałem edycji, ale jestem pewien, że 94% jestem pewien, że o to chodziło.)
Hermann Döppes
Ładnie i ładnie współpracuje find -type f -exec isutf8 {} +, ponieważ cytuje też nazwę pliku. (A korzystanie find ... -exec ... +jest również szybkie)
Tomasz Gandor
2
Nie używaj filepolecenia. Nie sprawdza całego pliku i w zasadzie zgaduje. Czasami daje nieprawidłowe odpowiedzi.
Możesz sprawdzić, czy plik przechodzi kodowanie UTF-8 w następujący sposób:
$ iconv -f utf8 <filename> -t utf8 -o /dev/null
Kod powrotu równy zero oznacza, że przekazuje UTF8. Niezerowy kod powrotu oznacza, że nie jest poprawny UTF8.
Nie można ustalić, czy plik został koniecznie wyeksportowany przy użyciu określonego schematu kodowania, ponieważ niektóre schematy kodowania nakładają się. Aby to zrobić, konieczne jest osadzenie metadanych w pliku, a nawet wtedy zaufasz każdemu, kto wygenerował ten plik, zamiast samodzielnie go sprawdzać ... i zawsze powinieneś sprawdzać go samodzielnie.
file
jest przykładem programu zgadującego mądrze.Odpowiedzi:
Możesz określić kodowanie pliku za pomocą następującego polecenia:
źródło
file -I filename
(-I jest wielką literą i).Jest, użyj
isutf8
polecenia z pakietu moreutils .Źródło: Jak rozpoznać, czy plik jest zakodowany w UTF-8, czy nie?
źródło
find -type f -exec isutf8 {} +
, ponieważ cytuje też nazwę pliku. (A korzystaniefind ... -exec ... +
jest również szybkie)Nie używaj
file
polecenia. Nie sprawdza całego pliku i w zasadzie zgaduje. Czasami daje nieprawidłowe odpowiedzi.Możesz sprawdzić, czy plik przechodzi kodowanie UTF-8 w następujący sposób:
Kod powrotu równy zero oznacza, że przekazuje UTF8. Niezerowy kod powrotu oznacza, że nie jest poprawny UTF8.
Nie można ustalić, czy plik został koniecznie wyeksportowany przy użyciu określonego schematu kodowania, ponieważ niektóre schematy kodowania nakładają się. Aby to zrobić, konieczne jest osadzenie metadanych w pliku, a nawet wtedy zaufasz każdemu, kto wygenerował ten plik, zamiast samodzielnie go sprawdzać ... i zawsze powinieneś sprawdzać go samodzielnie.
źródło
Jeszcze innym sposobem jest użycie
recode
, które zakończy się błędem, jeśli spróbuje dekodować UTF-8 i napotka nieprawidłowe znaki.źródło