В чем разница между "UTF-16" и "std::wstring"?
есть ли разница между этими двумя форматами хранения строк?
3 ответов
std::wstring
- это контейнер wchar_t
. Размер wchar_t
Не указано-компиляторы Windows, как правило, используют 16-разрядный тип, компиляторы Unix-32-разрядный тип.
UTF-16 - способ кодирования последовательностей кодовых точек Юникода в последовательностях 16-разрядных целых чисел.
использование Visual Studio, Если вы используете широкие символьные литералы (например,L"Hello World"
), которые не содержат символов за пределами BMP, вы получите UTF-16, но в основном две концепции не связаны. Если вы используете символы вне BMP,std::wstring
переводить не буду суррогатные пары в кодовые точки Unicode для вас, даже если wchar_t
- это 16 бит.
UTF-16-это определенная кодировка Unicode. std::wstring
- это реализация строки, которая использует wchar_t
в качестве базового типа для хранения каждого символа. (Напротив, регулярные std::string
использует char
).
кодировка, используемая с wchar_t
не обязательно должен быть UTF-16-он также может быть UTF-32, например.
UTF-16-это концепция текста, представленная в 16-байтовых элементах, но фактический текстовый символ может состоять из одного элемента
std:: wstring-это просто коллекция этих элементов и класс, В первую очередь связанный с их хранением.
элементы в wstring, wchar_t составляет не менее 16 бит, но может быть 32 бит.