Windows中使用的默认unicode字符编码是什么?

Windows中使用的默认unicode字符编码是什么?,windows,winapi,unicode,encoding,windows-runtime,Windows,Winapi,Unicode,Encoding,Windows Runtime,Windows中使用的默认unicode字符编码是什么?特别是在Windows编程(Win32和WinRT)中。当我在WinAPI中编程时,“char”映射到1字节字符存储,“wchar\u t”映射到2字节字符存储。如果UTF-16将65536以外的所有字符编码为4字节,那么Windows如何将这些字符映射为“wchar_t”数据类型?我知道我的问题还不够清楚,但我希望你理解我的一些担忧。多谢各位 Windows使用Unicode(除了MultiByteToWideChar()和WideCha

Windows中使用的默认unicode字符编码是什么?特别是在Windows编程(Win32和WinRT)中。当我在WinAPI中编程时,“char”映射到1字节字符存储,“wchar\u t”映射到2字节字符存储。如果UTF-16将65536以外的所有字符编码为4字节,那么Windows如何将这些字符映射为“wchar_t”数据类型?我知道我的问题还不够清楚,但我希望你理解我的一些担忧。多谢各位

Windows使用Unicode(除了
MultiByteToWideChar()
WideCharToMultiByte()
,它们支持UTF-7、UTF-8和UTF-16以及安装在操作系统中的其他字符集)。UTF-16使用(2个16位值一起工作)对0xFFFF以上的Unicode值进行编码。例如,Unicode代码点U+1D11E在UTF-16LE中编码为
0xD834 0xDD1E
(字节
0x34 0xD8 0x1E 0xDD
)。

感谢您在@Remy给出的启发性响应。但是我仍然不明白为什么我在linux(Ubuntu13.04)中的程序能够使用“char”数据类型来保存unicode字符[char*cp=“ӐҖ”;printf(“%s\n”,cp);),但是当我在windows中使用相同的程序时,它会说我使用的代码页是错误的。你知道为什么会这样吗?Windows使用处理器的endian属性。@papspi Linux通常使用UTF-8,其中代码点使用长度不同的单字节字符序列(1到6之间)进行编码。因此,
char*
可以指向ASCII编码或UTF-8编码(其中ASCII是一个子集)的存储器。这是UTF-8编码的一个特点;UTF-16不公开此功能。@Iinspectable:正式来说,UTF-8被限制为每个代码点1-4个编码字节,以保持与UTF-16的兼容性。较高的值是非法的。请参阅。@papspi:许多操作系统使用UTF-16,但Linux不是其中之一。如果需要编写可移植代码,则必须考虑操作系统的差异,或者使用可移植库,如iconv或ICU,甚至使用C++11中引入的新Unicode特性。