Исходный код определен широкими символьными строками и кроссплатформенностью
Под 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 };