Поддержка Unicode и кодировки UTF-16 и UTF-32

Последнее обновление: 13.01.2023

Стандарт 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;
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850