0

次のコードを使用して文字列を初期化します。

  std::string unicode8String = "\u00C1 M\u00F3ti S\u00F3l";

を使用して印刷するcoutと、出力はÁ Móti Sólになります。

しかし、を使用してテキストファイルから同じ同じ文字列を読み取りifstream、に保存してstd::string印刷すると、出力は\u00C1 M\u00F3ti S\u00F3l になります。

ファイルの内容は\u00C1 M\u00F3ti S\u00F3lで、 Á Móti Sólとして印刷したいと考えています。これを行う方法はありますか?

4

3 に答える 3

0

頭のてっぺんから(完全にテストされていません)

std::string convert_string(const std::string& in)
{
    std::string out;
    for (size_t i = 0; i < in.size(); )
    {
        if (i + 5 < in.size() && in[i] == '\\' && in[i+1] == 'u' && 
            in[i+2] == '0' && in[i+3] == '0' && 
            isxdigit(in[i+4]) && isxdigit(in[i+5]))
        {
            out += (unsigned char)16*in[i+4] + (unsigned char)in[i+5];
            i += 6;
        }
        else
        {
            out += in[i];
            ++i;
        }
    }
    return out;
}

ただし、これは 255 を超える Unicode 値 (例: \u1234) では機能しません。これは、文字列が 8 ビット文字を格納し、Unicode 文字が 20 ビットまで使用できるという根本的な問題があるためです。

私が言ったように、完全にテストされていませんが、あなたはその考えを理解できると確信しています.

于 2013-08-23T07:03:49.227 に答える
0

「 」を使って印刷してみませんかstd::wcout!

于 2013-08-23T07:07:44.893 に答える