Jak wykryć kodowanie pliku tekstowego ?

0

Jak w temacie
Jak wykryć kodowanie pliku tekstowego ?
znalazłem takie wątki
https://stackoverflow.com/questions/21852041/how-to-find-a-encoding-of-txt-file-in-c

ale jak otwieram plik tekstowy w hex edytorze, to nie mogę się dopatrzeć tych dwóch pierwszych bajtów

screenshot-20210108131723.png

2

Heurystyka. Jeśli nie masz pewności to musisz zgadywać.

0

Czyli mam brać pierwsze dwa znaki z pliku i porównać je do każdego z wzorców strony kodowej ? Czyli w kodzie musiałbym mieć całą tablicę np utf8 i porównać parę znaków ?

0

UTF8 jest kompatybilny ;) To jest kodowanie na zmiennej liczbie bajtów 1-4. Znaki ascii są zapisane na 1 bajcie.

0

możesz podać przykład ? bo nie bardzo rozumiem ?

1

Ale gdzie na dwóch bajtach niby? o_O W przykładzie który podałeś plik ma 4 bajty 0x54, 0x65, 0x73, 0x74 i są to poprawne wartości zarówno jeśli interpretujesz je jako ascii jak i jako UTF-8. Nie rozumiem problemu. Bo mam nadzieje ze rozumiesz ze bajt ma 8 bitów i jest reprezetowany przez 2 hexowe nibble bo 8 bitów moze przechować wartości 0-255 czyli 0-0xFF
Do poczytania: https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
https://kunststube.net/encoding/

0

Problem jest w tym
np Duża litera W w utf8 ma taki kod U+0057
Ta sama litera w kodzie ASCII ma kod 57

więc teraz jak rozróżnić oba znaki w hex ? A tym bardziej za pomocą kodu w C++ jeżeli ten znak w hex edytorze jest wyświetlany po prostu jako 57

0

W w UTF-8 to jest to samo co W w ASCII. UTF ≠ Unicode.

A jak rozróżnić? Przeczytaj jeszcze raz moją pierwszą odpowiedź.

0

Jeżeli by to wyglądało tak

screenshot-20210108144211.png

to rozpoznawanie znaków wydaje się być proste - jeżeli rozpiszemy to do pojedyńczych bitów...

bo wystarczyłoby sprawdzać każdy oktet i sprawa załatwiona... przynajmniej tak mi się wydaje. No ale z praktyki wychodzi, że nie bardzo...

1 użytkowników online, w tym zalogowanych: 0, gości: 1