string s = "おはよう";
wstring ws = FUNCTION(s, ws);
我如何将s的内容分配给ws?
搜索谷歌,并使用了一些技术,但他们不能分配确切的内容。内容失真。
最佳答案
假设示例(おはよう)中的输入字符串是UTF-8编码的(从外观上看不是,但是为了解释起见,我们假设它是:-))是Unicode字符串的表示形式如果您感兴趣,那么仅使用标准库(C++ 11和更高版本)就可以完全解决您的问题。
TL; DR版本:
#include <locale>
#include <codecvt>
#include <string>
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::string narrow = converter.to_bytes(wide_utf16_source_string);
std::wstring wide = converter.from_bytes(narrow_utf8_source_string);
更长的在线可编译且可运行示例:
(它们都显示相同的示例。有很多冗余...)
注意(旧):
正如评论中指出的以及在https://stackoverflow.com/a/17106065/6345中解释的那样,在某些情况下,使用标准库在UTF-8和UTF-16之间进行转换可能会在不同平台上产生意外的差异。为了获得更好的转换效果,请按照http://en.cppreference.com/w/cpp/locale/codecvt_utf8所述考虑
std::codecvt_utf8
注意(新):
由于
codecvt
header 在C++ 17中已弃用,因此引发了对该答案中提出的解决方案的一些担忧。但是,C++标准委员会在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0618r0.html中添加了重要声明因此,在可预见的将来,此答案中的
codecvt
解决方案是安全且可移植的。