在 C 程序中打印日文字符

Printing Japanese characters in C program

我想使用 C 程序打印日文字符。 我找到了一些日文字符的 Unicode 范围,将它们转换为十进制并使用 for 循环打印它们:

setlocale(LC_ALL, "ja_JP.UTF8");
for (int i = 12784; i <= 12799; i++) {
  printf("%c\n",i);
}

locale.h 和 wchar.h 出现在 header 中。

输出只给我????????????字符。

请告诉我如何解决。

%c只能打印0到127的字符,扩展字符使用:

printf("%lc\n", i);

或更好

wprintf(L"%lc\n", i);

另外很好的回答,我想解释一下"output gives me only ?????????? characters."


"%c" 接受一个 int 参数。回想一下传递给 ... 函数的 char 被转换为 int。然后

the int argument is converted to an unsigned char, and the resulting character is written. C17dr § 7.21.6.1 8.

因此 printf("%c" ... 处理值 0-255。该范围外的值将转换为该范围。


以下 OP 的代码以十六进制重写。

// for (int i = 12784; i <= 12799; i++) {
for (int i = 0x31F0; i <= 0x31FF; i++) {
  printf("%c\n",i);
}

使用 OP 区域设置和实现,打印值 [0xF0 - 0XFF] 导致 '?'。我相信 OP 的 [0x80 - 0xFF] 是正确的。存在其他可能性。我收到了 .

如果 OP 完成以下操作,将会看到更熟悉的输出,尽管不是所需的平假名字符。

for (int i = 0x3041; i <= 0x307E; i++) {
  printf("%c",i);
}

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~