在 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{|}~
我想使用 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);
另外
"%c"
接受一个 int
参数。回想一下传递给 ...
函数的 char
被转换为 int
。然后
the
int
argument is converted to anunsigned 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{|}~