Исходный код определен широкими символьными строками и кроссплатформенностью

Под Visual Studio строки, определенные в исходном коде, такие как L"abc" результат в C-строку с 2-байтовыми символами.

  • А как насчет компиляторов Linux? Можно ли использовать синтаксис L""?
  • Если да, являются ли символы в C-string linux широкими (то есть 4-байтовыми)?
  • Существует ли способ кросс-компиляции для определения строк Unicode в кодировке UCS-2 или UTF-16?

Спасибо.:)

РЕДАКТИРОВАТЬ: забыл упомянуть, что я не могу использовать C++11.

1 ответ

Решение

Не существует кроссплатформенного способа удобного написания строковых литералов UTF-16 без использования по крайней мере C11 или C++11 (где вы можете использовать u"...").

Синтаксис широкой строки (L"...") создает const wchar_t* используя определенную реализацию кодировку. В Windows это кодировка UTF-16; с GCC (с использованием GNU libc) эта кодировка UTF-32.

Единственный безопасный и переносимый способ создания строк UTF-16 или любых UTF-строк (до C11/C++11) - это записать их в виде целочисленных массивов. Например:

const uint16_t str[] = { 0x24EA, 0x0 };
Другие вопросы по тегам