我在尝试理解不同的编码方面有几个问题。
字符串的默认编码是什么?
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,但如果在不同的操作系统上有所不同,我有兴趣知道。
答案 0 :(得分:9)
标准没有指定窄字符串或宽字符串的编码。供应商通常会在目标机器上瞄准一些不足为奇的东西,但很难说更多。这意味着,例如,窄字符串可能在大多数个人计算机上使用ASCII(或者,实际上类似于ISO-8859),但在IBM大型机上使用EBCDIC。
宽字符串也有所不同 - 例如,Windows上的大多数编译器都使用UTF-16。在Linux上,UTF-32 / UCS-4可能更常见。
提到MessageBox
表示Windows,在那里(正如你所推测的那样)你通常会有宽字符串的UTF-16。在这种情况下,如果明确指定宽字符串,则还需要显式指定函数的宽版本 - MessageBoxW
。
就创建UTF-8字符串文字而言,我能说的就是“祝你好运”。这将由Visual Studio来完成,但是如果有办法让它做到这一点,我就不知道了。