我想知道如何强制GCC+GNU libc工具链进入正常的Unicode行为,其中源代码文件编码为Utf-8,编译后的程序使用Utf-8作为其多字节字符集,Utf-32LE作为其wchar_t,而不考虑任何语言环境信息.
我希望能够百分百地知道它会奏效.
我知道通常的答案是使用setlocale(LC_ALL, "en_US.utf8")
,但是您似乎只能知道setLocale(LC_ALL,"en_US.utf-8")在运行时是否可以工作,因为只有"C"和"POSIX"语言环境可以保证存在,而且,除非我遗漏了什么,否则您不能将语言环境编译到您的可执行文件中.
GCC有这些标志-finput-charset=utf-8 -fexec-charset=utf-8 -fwide-exec-charset=utf-32le
,但不清楚它们如何与setLocale()一起使用.如果我使用了它们,我需要调用setLocale()吗?它们是否被setLocale()覆盖?
似乎应该有一些可靠的方法来强制GCC+libc进入正常的unicode行为,而不必知道源系统或目标系统上预安装了什么区域设置.