Jak w języku C w tablicy przechowywać polskie znaki?

0

Tak jak w temacie, kiedyś słyszałem o jakiś rozszerzeniu charów tak żeby char przechowywał więcej niż jeden bajt.

0

Wszystko rozbija się o kodowanie.
Na Windows jest od tego ustawienie systemowe i jest to zwykle Windows-1250 (jedno bajtowe kodowanie zawierające polskie znaki).
Na Linux i podobnych zwykle używa się UTF-8, gdzie jeden znak reprezentowany jest przez od 1go do 4 bajtów, więc równocześnie pokryte są wszystkie języki.
Zwykle to oznacza, że w swoim kodzie C, nie musisz robić specjalnych rzeczy by móc korzystać z tych znaków.
Jedyny problem pojawia się podczas przetwarzania napisów. W kodowaniach jedno bajtowych jest to w miarę proste.
W przypadku UTF-8 jest to bardziej skomplikowane. Przykładowo kodowanie UTF-8 ie jest jednoznaczne (jeden napis można reprezentować na kilka sposobów).
Konwersja do wtchar* upraszcza sprawę, ale nadal trzeba pamiętać o normalizacji.

4

Na Windows jest od tego ustawienie systemowe i jest to zwykle Windows-1250 (jedno bajtowe kodowanie zawierające polskie znaki).

Pod Windows jest to o tyle skomplikowane, że w konsoli jest (przy polskich ustawieniach) kodowanie 852, a w oknach 1250.
Innego więc domyślnie wymaga kodowania printf a innego np. MessageBoxA.

Przykładowo, taki program:

#include <windows.h>
#include <stdio.h>
int main()
{
	const char *napis = "Żółć";
	printf(napis);
	MessageBoxA(NULL, napis, "Test", 0);
}

zapisany w pliku zakodowanym w CP852 wygląda tak:
a2.PNG

a zapisany w CP1250 wygląda tak:
a1.PNG

W konsekwencji, plik źródłowy zapisany w jakimś edytorze w domyślnym kodowaniu (a będzie nim zwykle 1250) nie będzie prawidłowo wyświetlał polskich znaków w konsoli. Trzeba albo zmienić kodowanie w edytorze na 852, albo wykonywać dodatkową gimnastykę w samym kodzie źródłowym.

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