Как преобразовать UTF-8 std :: string в UTF-16 std :: wstring? - PullRequest
21 голосов
/ 23 августа 2011

Если у меня есть UTF-8 std::string, как мне преобразовать его в UTF-16 std::wstring?На самом деле, я хочу сравнить два персидских слова.

Ответы [ 4 ]

27 голосов
/ 14 июля 2016

Вот как вы делаете это с C ++ 11 :

std::string str = "your string in utf8";
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>> converter;
std::wstring wstr = converter.from_bytes(str);

А вот заголовки, которые вам нужны:

#include <iostream>
#include <string>
#include <locale>
#include <codecvt>

Более полный пример доступен здесь: http://en.cppreference.com/w/cpp/locale/wstring_convert/from_bytes

27 голосов
/ 23 августа 2011

Вот некоторый код.Только слегка проверено и, возможно, есть несколько улучшений.Вызовите эту функцию, чтобы преобразовать строку UTF-8 в строку UTF-16.Если он считает, что входная строка не является UTF-8, он выдаст исключение, в противном случае он возвращает эквивалентную строку UTF-16.

2 голосов
/ 23 августа 2011

Эта страница также кажется полезной: http://www.codeproject.com/KB/string/UtfConverter.aspx

В разделе комментариев на этой странице также есть несколько интересных предложений для этой задачи, таких как:

// Get en ASCII std::string from anywhere
std::string sLogLevelA = "Hello ASCII-world!";

std::wstringstream ws;
ws << sLogLevelA.c_str();
std::wstring sLogLevel = ws.str();

Или

// To std::string:
str.assign(ws.begin(), ws.end());
// To std::wstring
ws.assign(str.begin(), str.end());

Хотя я не уверен в правильности этих подходов ...

2 голосов
/ 23 августа 2011

Здесь есть некоторые важные вопросы и ответы здесь и здесь , которые стоит прочитать.

Обычно вам нужно преобразовать строку в общий формат - я всегда предпочитаю конвертировать в UTF-8, но ваш пробег может быть опасным.

Для конвертации было написано много программного обеспечения - конверсия довольно проста и может быть написана за несколько часов, однако почему бы не взять что-то уже сделанное, например, UTF-8 CPP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...