- Zastanawiałem się, czy niektóre pliki tekstowe przechowują metodę kodowania wraz z zawartością tekstową do późniejszego dekodowania?
- Czy też zadaniem przeglądarki tekstu jest odgadnięcie metody kodowania dla danego pliku tekstowego, a zgadywanie może nie zawsze być prawidłowe? Jeśli tak, jak zgaduje to przeglądarka tekstów?
19
Odpowiedzi:
Odpowiedź Marka Szymańskiego jest poprawna - w zwykłym pliku tekstowym nie ma wyraźnych informacji o kodowaniu - taka jest definicja „zwykłego pliku tekstowego”, „zwykły” odnosi się do faktu, że w pliku nie ma metadanych.
Jednak niektóre aplikacje umieszczają znak kolejności bajtów (BOM) w plikach tekstowych zakodowanych jako UTF-16 lub UTF-32 / UCS-4. BOM tak naprawdę nie ma oznaczać kodowania (wskazuje nazwę bajtu, jak sama nazwa wskazuje), ale wiele aplikacji wykorzystuje obecność BOM do rozpoznawania UTF-16 / UTF-32, więc służy jako wskaźnik kodowania.
Tak, przeglądarka tekstu może tylko zgadywać. Zwykle używa pewnej heurystyki:
vim
Działa domyślnie: Najpierw spróbuje użyć UTF-8 podczas odczytu pliku; jeśli to się nie powiedzie, wraca do normy ISO-8859-1.W większości przypadków program musi zostać wyraźnie poinformowany o kodowaniu pliku tekstowego, w przeciwnym razie nie będzie w stanie poprawnie go odczytać.
źródło
file -bi
działa, jeśli BOM nie jest używany?file
ma różne heurystyki do określania typu pliku i kodowania. Najczęściej szuka ciągów znaków lub sekwencji bajtów w pliku. Jeśli potrzebujesz bardziej szczegółowych informacji, prawdopodobnie będziesz musiał przeczytać źródło. Lub po prostu zadaj osobne pytanie :-).file
nie może niezawodnie wykryć większości kodowań tekstu (ponieważ jest to bardzo trudne). Strona podręcznika zawiera pewne informacje na temat wykrywania zestawu znaków -file
głównie rozpoznaje tylko ASCII, UTF-8/16, EBCDIC i ISO-8859-x. Na przykład plik zakodowany w KOI8-R jest zgłaszany jako „ISO-8859-1”.Zwykłe pliki tekstowe nie przechowują żadnych informacji o ich kodowaniu. Przeglądarka określa to na podstawie ustawionego dla niego kodowania znaków. Nie może tego ustalić samodzielnie, ponieważ wszystko jest takie samo dla komputera.
źródło
less
Igrep
na Unix / Linux to zrobi).