Wenn Sie Windows / Visual Studio verwenden und eine Zeichenfolge in wstring konvertieren müssen, können Sie Folgendes verwenden:
#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());
Gleiches Verfahren zum Konvertieren einer Zeichenfolge in eine Zeichenfolge (manchmal müssen Sie eine Codepage angeben ):
#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());
Sie können eine Codepage und sogar UTF8 angeben (das ist ziemlich gut, wenn Sie mit JNI / Java arbeiten ). In dieser Antwort wird eine Standardmethode zum Konvertieren eines std :: wstring in utf8 std :: string gezeigt .
//
// using ATL
CA2W ca2w(str, CP_UTF8);
//
// or the standard way taken from the answer above
#include <codecvt>
#include <string>
// convert UTF-8 string to wstring
std::wstring utf8_to_wstring (const std::string& str) {
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
return myconv.from_bytes(str);
}
// convert wstring to UTF-8 string
std::string wstring_to_utf8 (const std::wstring& str) {
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
return myconv.to_bytes(str);
}
Wenn Sie mehr über Codepages erfahren möchten, gibt es einen interessanten Artikel über Joel über Software: Das absolute Minimum, das jeder Softwareentwickler unbedingt über Unicode und Zeichensätze wissen muss .
Diese CA2W-Makros (Convert Ansi to Wide = Unicode) sind Teil der ATL- und MFC-String-Konvertierungsmakros , einschließlich Beispielen.
Manchmal müssen Sie die Sicherheitswarnung # 4995 'deaktivieren. Ich kenne keine andere Problemumgehung (für mich passiert dies, wenn ich in VS2012 für Windows XP kompiliert habe).
#pragma warning(push)
#pragma warning(disable: 4995)
#include <AtlBase.h>
#include <atlconv.h>
#pragma warning(pop)
Bearbeiten:
Nun, laut diesem Artikel scheint der Artikel von Joel zu sein: "Während unterhaltsam, ist es ziemlich leicht auf tatsächlichen technischen Details". Artikel: Was jeder Programmierer unbedingt positiv über Codierung und Zeichensätze wissen muss, um mit Text arbeiten zu können .
strings
> 8-Bit-Zeichen akzeptiert werden. Ist es bereits in UTF-8 codiert?