Сохранить многобайтовый массив в массиве

Работает следующий код:

char *text = "中文";
printf("%s", text);

Затем я пытаюсь напечатать этот текст с помощью кодовой точки Юникода, которая 0x4e2d для "中" и 0x6587 для "文": введите описание изображения здесь

И, конечно же, ничего не распечатывается.

Я пытаюсь понять, что здесь происходит, когда я сохраняю многобайтовую строку в char* и как вывести многобайтовую строку с ее кодовой точкой в ​​юникоде и, более того, что это значит под словом "Format specifier '%ls' requires 'wchar_t *' argument instead of 'wchar_t *'"?

Спасибо за любую помощь.

Изменить: Я на Mac OSX (высокая Сьерра 10.13.6), с Clion введите описание изображения здесь

$ gcc --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.1.0 (clang-902.0.39.2)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
4 голоса | спросил WALKER 23 AM00000060000004531 2018, 06:43:45

1 ответ


0
Во-первых, приведенная выше строка не заканчивается нулем.Функция ---- +: = 1 =: + ---- знает начало массива, но не знает, где конец массива и какой у него размер.Вы должны добавить ноль в конце, чтобы создать строку C с нулевым символом в конце.Чтобы напечатать эту строку с нулевым символом в конце, используйте ---- +: = 2 =: + ---- для машин на основе Unix (включая Mac), используйте ---- +: = 3 =: + ----в Windows (это совершенно другая вещь, она на самом деле обрабатывает строку как UTF16)Обязательно добавьте ---- +: = 4 =: + ---- или ---- +: = 5 =: + ---- для машин на базе Unix.В стороне,В UTF32 кодовым точкам всегда нужны 4 байта (пример ---- +: = 7 =: + ---- ) Это может быть представлено 4-байтовым типом данных ---- +: = 8 =: + -- (или ---- +: = 9 =: + ---- в POSIX).В UTF8 кодовым точкам требуется 1, 2, 3 или 4 байта.Кодировка UTF8 для символов ASCII требует одного байта.В то время как ---- +: = 10 =: + ---- требуется 3 байта (или 3 ---- +: = 11 =: + ---- значения).Вы можете подтвердить это, запустив этот код:
ответил Barmak Shemirani 23 PM00000080000003531 2018, 20:06:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132