Стандарт C11 добавил поддержку строк в кодировках UTF-16 и UTF-32. Для этого в заголовочном файле uchar.h были определены соответственно типы char16_t и char32_t, которые занимают 2 и 4 байта соответственно.
При определении строк перед строкой типа char16_t*
указывается префикс u, а перед строкой типа char32_t*
-
префикс U
#include <stdio.h> #include <uchar.h> int main(void) { char16_t utf16_str[] = u"UTF-16 string"; printf("%ls \n", utf16_str); char32_t utf32_str[] = U"UTF-32 string"; // определяем размер строки utf-32 int n = sizeof(utf32_str)/4; for(int i=0; i < n; i++) { printf("%lc", utf32_str[i]); } return 0; }
Для вывода строки типа char16_t
применяется спецификатор %ls
. А для вывода отдельного символа - спецификатор %lc.
При этом можно использовать числовые коды символов в соответствующей кодировке. Например:
#include <stdio.h> #include <uchar.h> #include <locale.h> // для локализации на Windows int main(void) { setlocale(LC_ALL, ""); // для локализации на Windows char16_t utf16_str[] = u"\u043F\u0440\u0438\u0432\u0435\u0442"; //u"привет"; printf("%ls \n", utf16_str); // привет char16_t s = u'\u044F'; printf("%lc\n", s); // я return 0; }