[英]Wide character and Locale
#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 之间的区别只是打印 function。
我希望如果在某些区域设置中不打印宽字符,那么多字节字符也不应在同一区域设置中打印。
我很好奇为什么打印多字节字符串(#2),而没有打印宽字符串(#1)?
我知道如果 locale 不是"C"
,宽字符会打印得很好。 但为什么?? locale到底是做什么的?
+) 我认为多字节字符编码取决于语言环境,但多字节字符打印得很好,与语言环境无关。计算机如何确定多字节字符编码?
如果你使用Windows Console
,你应该使用_setmode
function 将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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.