C / C ++编码问题

时间:2012-03-15 05:20:52

标签: c++ string unicode encoding

我在尝试理解不同的编码方面有几个问题。

字符串的默认编码是什么?

char ascii[]= "Some text"; // This is plain ASCII right?
wchar_t utf[] = L"Some Text"; // Is this UTF-16? Or ASCII stored in wchar_t's?
MessageBoxW(NULL, L"Hello", L"HI", MB_OK); // What encodings are the 2 strings in?

然后,我将如何创建UTF-8字符串?如果我想在MessageBox中显示UTF-8字符?

我的问题主要针对Windows,但如果在不同的操作系统上有所不同,我有兴趣知道。

1 个答案:

答案 0 :(得分:9)

标准没有指定窄字符串或宽字符串的编码。供应商通常会在目标机器上瞄准一些不足为奇的东西,但很难说更多。这意味着,例如,窄字符串可能在大多数个人计算机上使用ASCII(或者,实际上类似于ISO-8859),但在IBM大型机上使用EBCDIC。

宽字符串也有所不同 - 例如,Windows上的大多数编译器都使用UTF-16。在Linux上,UTF-32 / UCS-4可能更常见。

提到MessageBox表示Windows,在那里(正如你所推测的那样)你通常会有宽字符串的UTF-16。在这种情况下,如果明确指定宽字符串,则还需要显式指定函数的宽版本 - MessageBoxW

就创建UTF-8字符串文字而言,我能说的就是“祝你好运”。这将由Visual Studio来完成,但是如果有办法让它做到这一点,我就不知道了。