簡體   English   中英

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示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM