Kodowanie plików

0

Witam.

Potrzebuję wczytać plik niewiadomego pochodzenia (może być zakodowany w utf8, ansci, unicode itp), a następnie zapisać w wybranym przeze mnie formacie.

Znalazłem taki przykład:
http://docwiki.embarcadero.com/CodeSamples/en/TEncoding_(Delphi)

Wszystko fajnie działa tylko w przypadku:

  LEncoding:= nil;

funkcja

 LOffset := TEncoding.GetBufferEncoding(LBuffer, LEncoding); 

Kiepsko rozpoznaje kodowanie plików, np. dla plików UTF8 rozpozna prawidłowo kodowanie jeśli jest plik zawiera BOM.

Dlatego zamiast podstawiać:

  LEncoding:= nil;

Chciałbym zdefinować ręcznie (inną metodą) kodowanie wczytanego pliku. Próbowałem użyć tego:
http://chsdet.sourceforge.net/ ale coś nie umiem tego uruchomić.

Posiadam D2010, czy macie jakieś metody na rozpoznawanie kodowania pliku?

0

UTF-8 jest dość łatwo rozpoznać — próbując go dekodować. Jeśli nie było błędów, to z dużym prawdopodobieństwem jest to UTF-8. Jeśli były, to raczej nie jest.
Ta metoda potrafi kolidować z chińszczyzną, ale przy braku BOM lepszej metody nie będzie.

Wiele programów (np. Total Commander) szuka też czy na początku pliku tekstowego pojawia się tekst „UTF8” albo „UTF-8”. dzięki temu plik o przykładowej treści

(plik zakodowany w UTF-8)
zażółć gęślą jaźń

zostanie uznany za UTF-8 na podstawie tekstu w pierwszej linijce.

sprawdza się to dobrze w plikach .xml, gdzie pierwsza linijka wygląda zazwyczaj
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

0

Jaką metodą spróbować zdeokodować i jak wychwycić ewentualne błędy?

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