1

バックエンドとして CouchDB を使用して、完全に utf-8 に準拠したアプリケーションを作成しようとしています。C++ と casablanca rest SDK を使用して、リクエストを Couch バージョン 1.6.1 に送信します。アプリケーションがさまざまな Unicode 文字を処理できることをテストするために、Couch に PUT したい JSON オブジェクトにテスト文字列があります。文字列はそのようにフォーマットされています(c ++)

const string_t InternationalText = 
L"Hello world!123#@%\n\r\v\t\f Å i åa ä e ö 
\u00c5 \u00fc \u03bb \u0416 \u4e16\u754c\u548c\u5e73 \U00013080";

文字列の最後の文字 \U00013080 ホルスの目で困っています。Couch から 400 bad request を受け取り、ログを確認すると、「字句エラー: 文字列内の無効な文字」というエラーが表示されます。

RawCap を使用してスニッフィングを行い、リクエストをキャプチャしました。応答サイクルと、リクエストの重要な部分は次のとおりです。

PUT *address*
Content-Type: application/json;charset=utf-8
Body: *Complex Json object containing the string as such*

{"description"="Hello world!123#@% Å i åa ä e ö Å ü λ Ж 世界和平 ",...}

リクエストの 16 進数を見ると、Horus の目文字は F0 93 82 80 としてエンコードされており、これはhttps://codepoints.net/U+13080によれば正しいです。それでも、UTF-8 エラーが発生します。私は何が欠けていますか?CouchDB は、Unicode 標準でプレーン 1+ の文字を処理する際に問題がありますか?

言うまでもなく、ヒエログリフを削除すると、すべてが正常に機能します。

4

1 に答える 1

2

問題が見つかりました。\v は JSON、https://www.rfc-editor.org/rfc/rfc7159の無効な文字であることがわかり、それを削除すると問題が解決します。呼び出しにまだエラーがあるにもかかわらず、テスト文字列の最後の文字を削除すると、Visual Studio の単体テスト フレームワークで奇妙な動作が発生し、テストに合格しました。

于 2015-05-18T18:46:04.407 に答える