0

ブーストの regex_search() を使用して html ページから取得した文字列があります。残念ながら、ページ内の日本語の文字は \u コードとして記述されており、これらは regex_search によって文字列内の通常の文字として解釈されます。

それで、私の質問は、これらのコードを通常の Unicode テキストに変換するにはどうすればよいですか? (明らかにUTF-8)

これは、UTF-8 をまったく考慮しない fstream の根本的な問題です。ブーストには fstream の独自の実装があるようですが、それに変更しても私のプログラムには影響がなく、Boost の fstream を UTF-8 で動作するように構成するための追加の設定が見つかりませんでした (ただし、今日は初めて作業を行う日です)。ブーストを使用すると、見逃していた可能性があります)。

最後の注意として、私はこれを Linux で実行していますが、システム固有のソリューションよりもポータブルなソリューションを歓迎します。

みんなありがとう、私は本当に助けに感謝します:D

4

1 に答える 1

0

fstreamはナロー文字のみのストリームです ( への typedefbasic_fstream<char>です)。std::wfstream探しているタイプになりますが、たとえば Windows に完全に移植するには、C++11 依存関係を導入する必要がある場合があります (Windows には Unicode ロケールはありませんが、C+ によって導入されたロケールに依存しない Unicode 変換をサポートします)。 +11. Linux 上の GCC は新しい Unicode 変換をサポートしていませんが、多くの Unicode ロケールから選択するか、boost.locale に依存しています。

あなたの手順は次のとおりです。

  1. 文字列を解析してコード ポイントの 16 進数値を取得する
  2. それらをワイド文字として保存します。
  3. に書き込みますstd::wofstream(または、最初に UTF-8 に変換してから に書き込みますstd::ofstream) 。

最後のステップを説明するには:

#include <fstream>
#include <locale>
int main()
{
    std::locale::global(std::locale("en_US.utf8")); // any utf8 works
    std::wofstream f("test.txt");
    f.imbue(std::locale());

    f << wchar_t(0x65e5) << wchar_t(0x672c) << wchar_t(0x8a9e) << '\n';
}

を含むファイルを生成します (Linux の場合)。e6 97 a5 e6 9c ac e8 aa 9e 0a

于 2013-02-04T23:25:15.033 に答える