45

このコードはVisualC++ 11でコンパイルされ、Windows 7で期待どおりに実行されますが、Windows7のMinGW4.7.0またはLinuxのgcc4.8.0のいずれかを使用してコンパイルできません。-std=c++11フラグを使用したコンパイル

#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);
}

エラー:

codecvt:そのようなファイルやディレクトリはありません。

4

4 に答える 4

31

GCCがこのコードを拒否する理由は単純です。libstdc++はまだサポートし<codecvt>ていません。

C ++ 11サポートステータスページはこれを確認します:

22.5標準コード変換ファセットN

于 2013-03-25T12:38:56.017 に答える
23

この質問はほぼ3年前に行われたもので、Ubuntu14.04を新しいアップデートで使用しても同じ問題が発生していることに驚きました。

2つ目の驚きは、@Fanaelが提供するリンクが次のように表示されることです。

22.5標準コード変換ファセットY

そこで、どのバージョンのGCCがC++11を完全に実装するかを検索しました。GCC5で完全なサポートが追加されたことがわかりました。

https://gcc.gnu.org/gcc-5/changes.html

次の新機能を含む、C ++11の完全なサポート:

..。

Unicode変換のロケールファセット。

..。

私が十分な評判を持っていれば、私は答えにコメントを入れて幸せだっただろう:)

于 2016-03-16T10:17:42.827 に答える
22

Boost.Localeを使用した回避策:

#include <boost/locale/encoding_utf.hpp>
#include <string>

using boost::locale::conv::utf_to_utf;

std::wstring utf8_to_wstring(const std::string& str)
{
    return utf_to_utf<wchar_t>(str.c_str(), str.c_str() + str.size());
}

std::string wstring_to_utf8(const std::wstring& str)
{
    return utf_to_utf<char>(str.c_str(), str.c_str() + str.size());
}  
于 2015-03-05T10:18:47.717 に答える
2

Ubuntu14.04とgcc5.3で動作します。

于 2016-08-08T16:40:13.877 に答える