Muszę odczytywać znaki UTF-8 z pliku tekstowego i przetwarzać je. na przykład w celu obliczenia częstotliwości występowania określonego znaku. Zwykłe znaki są w porządku. Problem występuje w przypadku znaków takich jak ü
lub ğ
. Oto mój kod, aby sprawdzić, czy dany znak występuje porównanie kodu ASCII znaku przychodzącej:Przetwarzaj znaki UTF-8 w C z pliku tekstowego
FILE * fin;
FILE * fout;
wchar_t c;
fin=fopen ("input.txt","r");
fout=fopen("out.txt","w");
int frequency = 0;
while((c=fgetwc(fin))!=WEOF)
{
if(c == SOME_NUMBER){ frequency++; }
}
SOME_NUMBER
jest to, czego nie może dowiedzieć się o tych znaków. W rzeczywistości te znaki drukują 5 różnych liczb, próbując wydrukować je w postaci dziesiętnej. podczas gdy na przykład dla postaci 'a'
zrobiłbym jako: if(c == 97){ frequency++; }
, ponieważ kod ascii 'a'
to 97
. Czy w każdym razie mogę zidentyfikować te znaki specjalne w C?
P.S. Praca ze zwykłym char (nie wchar_t
) tworzy ten sam problem, ale tym razem drukowanie dziesiętnego odpowiednika przychodzącej litery wydrukowałoby 5 różnych NEGATYWNYCH liczb dla tych znaków specjalnych. Problem stoi.
Większość postaci zajmuje więcej niż jeden bajt. Dlatego powinieneś przeczytać i porównać wiele bajtów. Jeśli chodzi o 'wchar_t', to myślę, że jest to zdefiniowane przez implementację, jakie funkcje kodowania znaków działają jak' fgetwc', a na wielu systemach nie jest to UTF-8. – delnan
W zależności od użytej czcionki, kilka punktów kodowych może mieć identyczne lub prawie identyczne glify. Wciąż są różne punkty kodowe w Unicode. Jakie jest widmo wejściowe i jakie widmo (kodowanie) ma zostać zamodelowane? –
@didierc jak utworzyć taką tabelę? czy mógłbyś dać mi kilka wskazówek na ten temat w odpowiedzi? co powinienem przypisać do tych znaków specjalnych w moim stole? – Ams