1

Rapidjson を使用して utf8 シーケンスをエスケープして\uXXXXフォーマットしようとしていますが、機能していません。

StringBuffer s;
Writer<StringBuffer, Document::EncodingType, ASCII<> > writer(s);
writer.StartObject();
writer.String("chinese");
writer.String("中文测试");
writer.EndObject();
cout << s.GetString() << endl;

ドキュメントにはエスケープされると書かれていますが、実際にはすべて消去されています。

AutoUTF テンプレートを使用しようとしましたが、ここにもメモリ ストリームのドキュメントはありません

何か案は?jsoncppも試しましたが、そのライブラリはUnicodeもサポートしていません

ありがとう@Milo Yip、私はVisual Studio 2010を使用していることを忘れています

4

1 に答える 1

2

OS Xで試してみましたが、動作します:

{"chinese":"\u4E2D\u6587\u6D4B\u8BD5"}

"中文测试"問題は、使用しているコンパイラがリテラル文字列を UTF-8 にエンコードしていないことだと思います。Linux/OSX はソース コードを UTF-8 として扱いますが、Windows はデフォルトでは扱いません。

C++11 UTF-8literal の使用を試すことができますu8"中文测试"。または、テスト用に UTF-8 でエンコードされたファイルから文字列を読み取ることもできます。


質問が更新されました。Visual Studio 2010 以降では、文書化されていない機能があります。

#pragma execution_character_set("utf-8")

リテラル文字が UTF-8 でエンコードされるようにします。C++11 互換コンパイラの場合、u8"xxx"リテラルを使用する必要があります。

とにかく、「Rapidjson は utf8 シーケンスをまったくエンコードしない」という主張は正しくありません。

于 2015-04-25T09:56:19.177 に答える