setlocale() 中语言环境的预期格式到底是什么?
What exactly is the expected format of the locale in setlocale()?
如果我使用 fputws
而没有 setlocale
,则只会打印 ASCII 字母。看来setlocale
是必须的,根据this site,setlocale(LC_CTYPE, "UTF-8")
和setlocale(LC_CTYPE, "en_us.UTF-8")
都可以。
但是我试了一下,setlocale(LC_CTYPE, "UTF-8")
不行,打印的是“Hello”。只有 setlocale(LC_CTYPE, "en_us.UTF-8")
,我得到“你好ねこ 2”。我看了那个页面上的评论,他还说“UTF-8”不起作用(他用的是 GCC,我用的是 VC++)。我看了一些手册页,但他们没有具体说明格式应该是什么。在 CPP reference, the example is using only formats like "en_US.UTF-8", but on tutorials point 上,示例使用类似“en_GB”的格式。
setlocale(LC_CTYPE, "UTF-8")
正确吗?
setlocale(LC_CTYPE, "UTF-8");
//setlocale(LC_CTYPE, "en_us.UTF-8");
FILE* output = _wfopen(L"output.txt", L"w");
fputws(L"Hello ねこ 2", output);
fclose(output);
答案是系统特定的。引用您链接到的 cppreference 页面:
system-specific locale identifier. Can be "" for the user-preferred locale or "C" for the minimal locale
我 认为“UTF-8”通常是无效的语言环境名称(它至少需要语言标识符,但不是 100%)。但是,通常您会希望简单地使用“”来默认用户偏好(我希望这对于显示他们的输入是正确的)。
如果我使用 fputws
而没有 setlocale
,则只会打印 ASCII 字母。看来setlocale
是必须的,根据this site,setlocale(LC_CTYPE, "UTF-8")
和setlocale(LC_CTYPE, "en_us.UTF-8")
都可以。
但是我试了一下,setlocale(LC_CTYPE, "UTF-8")
不行,打印的是“Hello”。只有 setlocale(LC_CTYPE, "en_us.UTF-8")
,我得到“你好ねこ 2”。我看了那个页面上的评论,他还说“UTF-8”不起作用(他用的是 GCC,我用的是 VC++)。我看了一些手册页,但他们没有具体说明格式应该是什么。在 CPP reference, the example is using only formats like "en_US.UTF-8", but on tutorials point 上,示例使用类似“en_GB”的格式。
setlocale(LC_CTYPE, "UTF-8")
正确吗?
setlocale(LC_CTYPE, "UTF-8");
//setlocale(LC_CTYPE, "en_us.UTF-8");
FILE* output = _wfopen(L"output.txt", L"w");
fputws(L"Hello ねこ 2", output);
fclose(output);
答案是系统特定的。引用您链接到的 cppreference 页面:
system-specific locale identifier. Can be "" for the user-preferred locale or "C" for the minimal locale
我 认为“UTF-8”通常是无效的语言环境名称(它至少需要语言标识符,但不是 100%)。但是,通常您会希望简单地使用“”来默认用户偏好(我希望这对于显示他们的输入是正确的)。