C lowercase ze znakami specjalnymi np. ą,ś,ć

0

Hej, w jaki sposób używając języka C mogę zamienić:

char* str = "aBcĄśĆ";

na "abcąść.
Męczę się z metodą lowercase - ona działa poprawnie wyłącznie dla znaków ASCII.

5

Masz dwie podstawowe możliwości:

  1. Użyj biblioteki do Unicodu, na przykład utf8proc. Najlepsze rozwiązanie na współczesnych maszynach nie projektowanych przez sadystów.
  2. Męcz się ręczną konwersją w zależności od używanej strony kodowej. Popularne rozwiązania z polskimi znakami to ISO-8859-2 (bo standard ISO), Windows-1250 (bo Microsoft musi po swojemu…), CP852 (bo Microsoft musi po swojemu na dwa różne sposoby 🙄), Mac OS Central Europe (bo Apple nie mogło być gorsze…) i Mazovia (bo to oficjalna polska norma); ale istnieje jakoś ze dwadzieścia innych, mniej popularnych… CorelDraw miał swój, Amiga miała dwa swoje, TeXPL miał swój…
3

Jakie kodowanie? Windows-1250, Utf-8, ....?
Da się zrobić w standardowym C.
Nawet jest przykład w dokumentacji: https://en.cppreference.com/w/c/string/byte/tolower

1

Ja umiarkowanie odradzam to rozwiązanie wyżej, z setlocale jest sto jeden problemów, a w wielowątkowych aplikacjach to już w ogóle… Więcej na ten temat: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f027338b0fab0f5078971fbe (uwaga, język mocno nieparlamentarny)

Co prawda własne rozwiązanie pewnie nie będzie dużo lepsze…

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