如何将 Unicode 代码点打印为 C 中的字符?

haz*_*ard 5 c unicode file-io utf-8

我有一个uint32_t元素数组,每个元素存储一个非拉丁 Unicode 字符的代码点。如何在控制台上打印它们或将它们作为 UTF-8 编码字符存储在文件中?我知道它们可能无法在控制台上正确呈现,但如果我在兼容的编辑器中打开它们,它们应该可以正常显示。

我曾尝试使用wprintf(L"%lc", UINT32_T_VARIABLE)fwprintf(FILE_STREAM, L"%lc", UINT32_T_VARIABLE)但无济于事。

chq*_*lie 2

您必须首先选择正确的区域设置:

#include <locale.h>

setlocale(LC_ALL, "C.UTF-8");
Run Code Online (Sandbox Code Playgroud)

或者

setlocale(LC_ALL, "en_US.UTF-8");
Run Code Online (Sandbox Code Playgroud)

然后使用printforfprintf的格式%lc

printf("%lc", UINT32_T_VARIABLE);
Run Code Online (Sandbox Code Playgroud)

这仅适用于足够小的 Unicode 代码点以适合wchar_t. 对于更完整和可移植的解决方案,您可能需要自己实现 Unicode 到 UTF-8 的转换,这并不是很困难。