Jika Anda menggunakan Windows / Visual Studio dan perlu mengonversi string ke wstring Anda bisa menggunakan:
#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());
Prosedur yang sama untuk mengonversi wstring ke string (kadang-kadang Anda harus menentukan codepage ):
#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());
Anda dapat menentukan codepage dan bahkan UTF8 (itu cukup bagus ketika bekerja dengan JNI / Java ). Cara standar untuk mengubah string std :: wstring ke utf8 std :: ditunjukkan dalam jawaban ini .
//
// 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);
}
Jika Anda ingin tahu lebih banyak tentang codepages ada artikel menarik tentang Joel tentang Perangkat Lunak: Minimum Yang Mutlak Setiap Pengembang Perangkat Lunak Sepenuhnya, Pasti Harus Tahu Tentang Unicode dan Set Karakter .
Makro CA2W (Konversi Ansi ke Lebar = unicode) ini adalah bagian dari Makro Konversi String ATL dan MFC , termasuk sampel.
Kadang-kadang Anda harus menonaktifkan peringatan keamanan # 4995 ', saya tidak tahu solusi lain (bagi saya itu terjadi ketika saya dikompilasi untuk Windows XP di VS2012).
#pragma warning(push)
#pragma warning(disable: 4995)
#include <AtlBase.h>
#include <atlconv.h>
#pragma warning(pop)
Sunting:
Yah, menurut artikel ini artikel oleh Joel tampaknya: "sambil menghibur, itu cukup ringan pada detail teknis yang sebenarnya". Artikel: Apa Yang Harus Semua Programmer Sepenuhnya Ingin Tahu Tentang Pengkodean dan Set Karakter Untuk Bekerja dengan Teks .
strings
menerima> karakter 8-bit. Apakah sudah dikodekan dalam UTF-8?