将 std::string 移植到 std::wstring,反之亦然
Portable conversion of std::string to std::wstring and vice versa?
我需要将std::string转换为std::wstring。我在Visual Studio 2010的以下行中使用了一些东西(并且工作正常):-
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);
但是,当我在gcc 4.3.4
上构建它时,它给出了错误:-
.cxx:333: error: 'wstring_convert' is not a member of 'std'
.cxx:333: error: 'codecvt_utf8_utf16' is not a member of 'std'
任何人都可以为我提供一些以独立于平台的方式进行此转换的方法。
#include <codecvt>
#include <locale>
// utility wrapper to adapt locale-bound facets for wstring/wbuffer convert
template<class Facet>
struct deletable_facet : Facet
{
template<class ...Args>
deletable_facet(Args&& ...args) : Facet(std::forward<Args>(args)...) {}
~deletable_facet() {}
};
std::string wstr2str(const wchar_t* wstr) {
std::wstring source(wstr);
std::wstring_convert<deletable_facet<std::codecvt<wchar_t, char, std::mbstate_t>>, wchar_t> convert;
std::string dest = convert.to_bytes(source);
return dest;
}
基于 https://en.cppreference.com/w/cpp/locale/codecvt 示例。
相关文章:
- -fshort-wchar 和 std::wstring - 分段错误
- 如何将std::wstring转换为char const[]
- 将utf16宽std::wstring转换为utf8窄std::string以获得罕见字符时出现问题
- 找不到 std::wstring 中存在的wchar_t
- 将整数附加到 std::wstring 会给出错误
- 使用STD :: WSTRING或WCHAR_T登录
- 从 std::wstring 转换为 jstring
- UTF8 数据到 std::string 或 std::wstring
- 将 std::u16string 转换为 std::wstring,无需复制
- 从相同的硬编码字符串文字初始化std::string和std::wstring
- std::wstring中ASCII符号的字节表示,具有不同的语言环境
- std::wstring 和 LOGFONT 重载冲突 - 为什么?
- 为什么我的 BSTR 到 std::wstring 的转换这么慢?我的测试仪不好吗?
- 将 std::string 移植到 std::wstring,反之亦然
- 从DLL返回std::wstring是否安全
- 在std::string和std::wstring之间转换的多平台方式
- 正在将std::wstring转换为const wchar_t x[]
- std::wstring指针赋值C++
- porting std::wstring to gcc cygwin
- 结合 std::wstring 和函数