Rozpoznawanie kodowania znaków

0

Witam, chciałbym się upewnić w kilku sprawach.

Piszę banalny program, który ma być konwerterem plików tekstowych dla różnych, nieraz dziwnych kodowań (np. Mazovia). I ma automatycznie rozpoznawać kodowanie w jakim zapisany jest plik.
Dla każdego obsługiwanego kodowania mam tablicę dozwolonych polskich znaków.
I robię to tak:
dla każdego kodowania (każdej tablicy dozwolonych bajtów)
dla każdego bajtu strumienia wejściowego o wartości większej niż 0x7F
jeśli wartość tego bajtu NIE znajduje się w tablicy bajtów poprawnej dla kodowania
znaczy to, że to na pewno nie jest to kodowanie, sprawdzanie jest przerywane i rozpoczynane jest sprawdzanie dla następnego kodowania

Doszedłem do wniosku, że jest to rozwiązanie lepsze niż liczenie ilości pasujących w pliku znaków dla każdego kodowania, a następnie wybranie tego "najbardziej pasującego".

W zasadzie to działa, ale:

  1. Czy to jest dobrze? Czy można szybciej?
  2. Sprawdzane są jedynie polskie znaki (to wymóg odgórny). A np. dla Win1257 i Latin7 polskie kody są identyczne, dlatego sprawdzanie zwraca oba wyniki. Czy nie lepiej byłoby wówczas sprawdzić także pozostałych znaków?

Z góry dzięki.

0

A czy większość kodowań nie korzysta z tych samych zakresów kodów znaków?
Tyle że dla tych samych kodów po prostu przypisuje inną literę?

0

Nie, różnych kodów używają, ale czasem te kody się powtarzają (tylko w wymienionej przeze mnie poprzednio parze akurat wszystkie).

0

Wrzuć do tablicy ilość powtórzeń w tekście każdego znaku powyżej 0x7F a następnie wybierz takie kodowanie, dla którego najwięcej tych znaków jest literami.
Jeśli w macierzy zero-jedynkowej, której kolumny odpowiadają znakom, a wiersze kodowaniom zapisałbyś, czy dany znak jest literą (1) czy nie (0) to mnożąc taką macierz przez kolumnowy wektor wystąpień znaków w badanym tekście (wspomniana na początku tablica) otrzymasz wektor kolumnowy, którego największa współrzędna to najlepiej dopasowane kodowanie (kodowaniom odpowiadają wiersze otrzymanego wektora).

Jeśli tekst jest dość długi, to analizuj go fragmentami, dopóki najlepsze dopasowanie nie będzie jedynym najlepszym dopasowaniem.

//edit do niżej
moja pomyłka, poprawiłem
Co innego celowe idiotyczne przekręcanie. Rozumiem, że w jakimś zamkniętym kręgu się tak mówi/pisze, ale nie używaj takich rzeczy na ogólnopolskim forum.
BTW, nie ma to jak off-top z ripostą :/.

0

@adf88, mnie

szcałka
także kłuje w oczy, ale
do pÓÓÓÓki
kłuje równie mocno.

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