Если вы используете Windows / Visual Studio и вам нужно преобразовать строку в wstring, вы можете использовать:
#include <AtlBase.h>
#include <atlconv.h>
...
string s = "some string";
CA2W ca2w(s.c_str());
wstring w = ca2w;
printf("%s = %ls", s.c_str(), w.c_str());
Та же процедура для преобразования wstring в строку (иногда вам нужно будет указать кодовую страницу ):
#include <AtlBase.h>
#include <atlconv.h>
...
wstring w = L"some wstring";
CW2A cw2a(w.c_str());
string s = cw2a;
printf("%s = %ls", s.c_str(), w.c_str());
Вы можете указать кодовую страницу и даже UTF8 (это очень приятно при работе с JNI / Java ).
CA2W ca2w(str, CP_UTF8);
Если вы хотите узнать больше о кодовых страницах , есть интересная статья о Джоэле о программном обеспечении: Абсолютный минимум для каждого разработчика программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов
Эти макросы CA2W (Convert Ansi to Wide = unicode) входят в состав макросов преобразования строк ATL и MFC , включая образцы.
Иногда вам нужно отключить предупреждение безопасности # 4995 ', я не знаю другого обходного пути (для меня это случилось, когда я скомпилировал для WindowsXp в VS2012).
#pragma warning(push)
#pragma warning(disable: 4995)
#include <AtlBase.h>
#include <atlconv.h>
#pragma warning(pop)
Edit:
Что ж, в соответствии с этой статьей статья Джоэля выглядит так: «хотя она и интересна, она довольно легка в реальных технических деталях». Статья: Что абсолютно необходимо каждому программисту знать о кодировке и наборах символов для работы с текстом .