C/C++编码问题

C/C++ encoding questions

本文关键字:问题 编码 C++      更新时间:2023-10-16

在尝试理解不同的编码时,我有一些问题。

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

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,但如果不同操作系统的问题有所不同,我很想知道。

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

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

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

就创建UTF-8字符串而言,我只能说"祝你好运"。这将取决于Visual Studio,但如果有办法让它做到这一点,我不知道