Решение от: http://forums.devshed.com/c-programming-42/wstring-to-string-444006.html
std::wstring wide( L"Wide" );
std::string str( wide.begin(), wide.end() );
// Will print no problemo!
std::cout << str << std::endl;
] Остерегайтесь того, что здесь есть no преобразование набора символов. Это просто означает, что каждый итерированный wchar_t
присваивает char
- усекающее преобразование. Он использует std :: string c'tor :
template< class InputIt >
basic_string( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
Как указано в комментариях:
значения 0-127 идентичны в практически каждая кодировка, поэтому усекающие значения, которые все меньше 127, дают один и тот же текст.
-
значения 128-255 кодовой страницы Windows 1252 (по умолчанию Windows English) и значения 128-255 юникода в основном одинаковы, поэтому, если это кодовая страница, в которой вы используете большинство этих символов, должна быть усечена до правильных значений. (Я полностью ожидал, что и работаю, я знаю, что наш код на работе опирается на это для é, который я скоро исправлю)
И обратите внимание, что коды указывают в диапазоне
0x80 - 0x9F
в Win1252 будет работать не . Это включает в себя€
,œ
,ž
,Ÿ
, ...