繁体   English   中英

宽字符和语言环境

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM