Eğer kullanıyorsanız , Windows / Visual Studio kullanmak olabilir wstring bir dize dönüştürmek için ve ihtiyacı:
#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'i dizeye dönüştürmek için aynı prosedür (bazen bir kod sayfası belirtmeniz gerekir ):
#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());
Bir kod sayfası ve hatta UTF8 ( JNI / Java ile çalışırken oldukça güzel) belirtebilirsiniz . Bir std :: wstring'i utf8 std :: string'e dönüştürmenin standart bir yolu bu cevapta gösterilmiştir .
//
// 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);
}
Kod sayfaları hakkında daha fazla bilgi edinmek istiyorsanız , Yazılım üzerinde Joel hakkında ilginç bir makale var: Mutlak Minimum Her Yazılım Geliştiricisi Kesinlikle, Olumlu Unicode ve Karakter Setleri Hakkında Bilmelisiniz .
Bu CA2W (Ansi'yi Geniş = Unicode'a Dönüştür) makroları, ATL ve MFC Dize Dönüşüm Makrolarının bir parçasıdır , örnekler dahil.
Bazen # 4995 güvenlik uyarısını devre dışı bırakmanız gerekir, diğer geçici çözümü bilmiyorum (bana VSX1212'de WindowsXp için derlediğimde olur).
#pragma warning(push)
#pragma warning(disable: 4995)
#include <AtlBase.h>
#include <atlconv.h>
#pragma warning(pop)
Edit:
Eh, bu makaleye göre Joel tarafından makale gibi görünüyor: "eğlenceli iken, gerçek teknik detaylar oldukça hafif". HABER: Her Programcı'nın Metinle Çalışmak için Kodlama ve Karakter Kümeleri Hakkında Kesinlikle, Olumlu Olarak Bilmesi Gerekenler .
strings
8 bit karakter kabul ediyorum . UTF-8'de zaten kodlanmış mı?