В чем разница между "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 бит.