c-宽字符和区域设置



#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

最新更新