バックエンドとして 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+ の文字を処理する際に問題がありますか?
言うまでもなく、ヒエログリフを削除すると、すべてが正常に機能します。