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