#1
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
int main()
{
setlocale(LC_CTYPE,"C");
wprintf(L"大n");
return 0;
}
//result : ?
#2
#include <stdio.h>
#include <locale.h>
int main()
{
setlocale(LC_CTYPE,"C");
printf("大n");
return 0;
}
//result : 大
#1和#2之间的区别只是打印功能。
我预计,如果宽字符不在特定的区域中打印,那么多字节字符也不应该在同一区域中打印。
我很好奇为什么打印多字节字符串(#2(,而不打印宽字符串(#1(?
我知道如果区域设置不是"C"
,宽字符会打印得很好。但为什么??区域设置的具体功能是什么?
+)我认为多字节字符编码依赖于区域设置,但多字节字符打印得很好,不受区域设置的影响。。计算机如何确定多字节字符编码?
如果使用Windows Console
,如果要使用宽字符串,则应使用_setmode
函数将stdout
的默认翻译模式更改为Unicode。
例如:
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <fcntl.h>
#include <io.h>
int main()
{
setlocale(LC_CTYPE,"C");
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L"大n");
return 0;
}
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/setmode?view=msvc-170