簡體   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