В чем разница между "UTF-16" и "std :: wstring"? - PullRequest
10 голосов
/ 22 ноября 2010

Есть ли разница между этими двумя форматами хранения строк?

Ответы [ 3 ]

14 голосов
/ 22 ноября 2010

std::wstring является контейнером wchar_t.Размер wchar_t не указан - компиляторы Windows, как правило, используют 16-битный тип, Unix-компиляторы 32-битный тип.

UTF-16 - способ кодирования последовательностейкодовых точек Unicode в последовательностях из 16-битных целых чисел.

Используя Visual Studio, если вы используете литералы широких символов (например, L"Hello World"), которые не содержат символов за пределами BMP , выв конечном итоге с UTF-16, но в основном эти два понятия не связаны.Если вы используете символы вне BMP, std::wstring не будет переводить суррогатные пары в кодовые точки Unicode для вас, даже если wchar_t равно 16 битам.

6 голосов
/ 22 ноября 2010

UTF-16 - это конкретная кодировка Unicode.std::wstring - это строковая реализация, которая использует wchar_t в качестве базового типа для хранения каждого символа.(Напротив, обычный std::string использует char).

Кодировка, используемая с wchar_t, не обязательно должна быть UTF-16 - это также может быть UTF-32например.

2 голосов
/ 22 ноября 2010

UTF-16 - это концепция текста, представленного в 16-байтовых элементах, но фактический текстовый символ может состоять из одного элемента

std :: wstring - это просто набор этих элементов и является классомв первую очередь касается их хранения.

Элементы wstring, wchar_t, по крайней мере, 16-битные, но могут быть 32-битными.

...