wchar_t
не обязательно означает, что UTF-16. В Linux и Unix (в компиляторе gcc и clang) wchar_t
имеет длину 4 байта, что подходит для UTF-32.
Размер wchar_t зависит от компилятора.
Хранилище данных Unicode не должно основываться на wchar
. В C++ 11 существуют такие типы, как char16_t
и char32_t
.
Что касается вашего вопроса, который должен быть использован:
Вы можете выполнить все эти операции, как на UTF-16 и UTF-8.
Если пространство имеет значение для выбранных вами символов, а UTF-16 обеспечивает оптимальное пространство, используйте UTF-16.
Однако сравнение строк немного сложно в UTF-16 из-за участия BMP. Это проблематично только в том случае, если у него будут символы за пределами U+10000
.
UTF-8 проще для сравнения строк, но не для подсчета количества фактических символов Юникода или кодовых точек из-за переменного количества байтов для кодовой точки.
Операция копирования одинаково проста в обоих случаях.
Для разбора я считаю, что разделители будут символами ASCII. В этом случае, все будет легко. Если это не ASCII, UTF-8 может быть немного трудным для решения. В этом случае UTF-16 будет иметь проблему, когда есть BMP.
Спасибо пользователю694733 за это.
Представление UTF-8 такое же как для мало-endian, так и для big-endian, но не UTF-16. Здесь порядок байтов определяется BOM (знак порядка байтов).
Если вы не планируете использовать C++ 11 или C11 для char16_t, вы можете сохранить свою строку в массиве из short
(если это 16-разрядный бит). Но вы можете написать много функций, таких как длина строки и копия строки самостоятельно (что, я думаю, легко писать, кроме printf и scanf).
Еще одна проблема, вы сталкиваетесь в этом подходе является то, что вы не будете в состоянии объявить литералов как
short word[] = "ABC";
, которые вы можете получить в C++ 11.
Оба являются Unicode. [Читайте это] (http://www.joelonsoftware.com/articles/Unicode.html) – user694733
@ user694733: Привет, я прочитал это, но это не то, что я спросил. Я спросил, с кем из них легче работать (учитывая, что я не решаюсь устанавливать библиотеки, такие как ICU на устройстве). Если я использую UTF16 - значит ли это, что мне нужно использовать 'wchar_t' и соответствующие функции во всем мире? посмотрите на вопрос о том, что я спросил. –
Да, если вы хотите самостоятельно разобрать файл Unicode. – Abhineet