Вопросы кодирования C / C ++ - PullRequest
7 голосов
/ 15 марта 2012

У меня есть несколько вопросов, пытаясь понять различные кодировки.

Какая кодировка по умолчанию для строк?

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?Если бы я хотел отобразить символы UTF-8 в MessageBox?

Кстати, мои вопросы в основном касаются Windows, но если они разные в разных ОС, мне интересно знать.

1 Ответ

9 голосов
/ 15 марта 2012

Стандарт не определяет кодировку для узких или широких строк. Поставщик обычно стремится к чему-то, что не удивительно на целевой машине, но трудно сказать больше, чем это. Это означает, например, что узкая строка, вероятно, будет использовать ASCII (или, действительно, что-то вроде ISO-8859) на большинстве персональных компьютеров, но EBCDIC на мэйнфрейме IBM.

Строки широких символов также различаются - например, большинство компиляторов в Windows будут использовать UTF-16. В Linux UTF-32 / UCS-4, вероятно, более распространен.

Упоминание MessageBox предполагает Windows, где (как вы и предполагали) у вас обычно будет UTF-16 для широких струн. В этом случае, если вы явно указываете широкие строки, вы также хотите явно указать широкую версию функции - MessageBoxW.

Что касается создания строкового литерала UTF-8, все, что я могу сказать, это "удача". Это может сделать Visual Studio, но если есть способ заставить это сделать, я не знаю об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...