Вместо использования wchar_t, я просто использую массив символов. Это правильно?
Я бы сказал нет.Набор символов и кодировка по умолчанию для char
определяется реализацией (это может быть EBCDIC или ASCII или UTF-8 или независимо от того, какой исходный файл использовался или что-то еще), а набор символов и кодировка по умолчанию для wchar_t
также определяется реализацией(может быть UTF-16LE или ...).
Если вам нужен вывод UTF-8;тогда (особенно для переносимого кода) вам нужно игнорировать случайные бессмысленные глупости, которые чувствовал компилятор Си.Вам также следует избегать использования char
, потому что подписано или не подписано, определяется реализацией, избегайте использования unsigned char
, потому что нет реальной гарантии, что это 8 бит, и избегайте использования wchar_t
(поскольку его размер определяется реализацией)
В частности (для UTF-8) я бы использовал uint8_t
, например:
uint8_t str[] = 0xE9, 0x85, 0x8D, 0xE7, 0xBD, 0xAE, 0xE6, 0x96, 0x87, 0xE4, 0xBB, 0xB6,
0xE4, 0xB8, 0xAD, 0xE5, 0x8C, 0x85, 0xE5, 0x90, 0xAB, 0xE4, 0xB8, 0xAD,
0xE6, 0x96, 0x87, 0x00;
Конечно, если вы хотите, чтобы файл содержал CNS-11643 (или что-то еще), вы могли бы сделатьэто тоже.Вам просто нужно найти подходящий тип и найти «массив чисел этого типа» (например, возможно, с помощью утилиты, такой как hexdump
, в текстовом файле, который использует нужный набор символов и кодировку).