我想用UTF-8打印blå
,但我不知道怎么做.b
的UTF-8是62,l
是6C,å
是C3A5.我不确定该怎么处理å
个角色.以下是我的代码:
#include <stdio.h>
int main(void) {
char myChar1 = 0x62; //b
char myChar2 = 0x6C; //l
char myChar3 = ?? //å
printf("%c", myChar1);
printf("%c", myChar2);
printf("%c", myChar3);
return 0;
}
我还try 了这个:
#include <stdio.h>
#define SIZE 100
int main(void) {
char myWord[SIZE] = "\x62\x6c\xc3\xa5\x00";
printf("%s", myWord);
return 0;
}
但是,输出结果是:
blå
最后,我try 了一下:
#include <stdio.h>
#include <locale.h>
#define SIZE 100
int main(void) {
setlocale(LC_ALL, ".UTF8");
char myWord[SIZE] = "\x62\x6c\xc3\xa5\x00";
printf("%s", myWord);
return 0;
}
输出与以前相同.
我不确定我是否完全理解Unicode.如果我理解正确的话,UTF-16和UTF-32使用宽字符,其中每个字符需要相同数量的字节(UTF-16为2或4).另一方面,UTF-8使用宽字符,其中大小可能有所不同(1-4字节).我知道前128个字符需要1个字节,几乎所有的拉丁文-1都可以用2个字节来描述,等等.因为UTF-8不需要宽字符,所以我不需要在代码中使用wchar函数.因此,我不明白为什么我的第二个和/或第三个代码不能工作.我唯一的解决方案是包含setmode
来更改stdin
和stdout
的编码,尽管我不确定这是否可行,也不确定如何实现它.
摘要:
为什么我的代码不起作用?
我在WINDOWS和VScode上,有MINGW32作为编译器.