2013-08-08 2 views
0

Мне интересно, достаточно ли этого достаточно для использования в производственной кодовой базе?Преобразование строки STL между wstring и строкой

std::wstring s2w(const std::string& s) 
{ 
    std::wstring ws; 
    ws.assign(s.begin(), s.end()); 
    return ws; 
} 

std::string w2s(const std::wstring& w) 
{ 
    std::string s; 
    s.assign(w.begin(), w.end()); 
    return s; 
} 
+2

AFAIK, нет, не является адекватным, потому что он не делает никакого преобразования (только сужение). Вам нужно будет сделать реальное преобразование между узкой строковой кодировкой и широким строковым кодированием. Например, используя 'codecvt ', в C++ 11, возможно, в сочетании с 'wstring_convert'. – dyp

+0

Аналогичный вопрос: http://stackoverflow.com/questions/7141260/compare-stdwstring-and-stdstring/7159944 – dyp

ответ

0

Нет, этого недостаточно.

Рассмотрим wstring, содержащий следующие символы (числовые значения, используемые для ясности) { 0x41, 0x1243, 0x62 } (Это «A», а затем эфиопский слог QAA, а затем «Ъ», если вы используете Unicode).

Преобразование в string с использованием вашей процедуры приведет к последовательности, содержащей { 0x41, 0x43, 0x42 } или «ACb». Наверное, не то, что вы ожидали - или хотели.

Как сказал DyP - вы не делаете никакого преобразования, только сужаетесь.

Смежные вопросы