我正在尝试以 CouchDB 作为后端编写一个完全兼容 utf-8 的应用程序。我使用 c++ 和 casablanca rest sdk 将我的请求发送到 Couch 版本 1.6.1。为了测试应用程序是否可以处理各种 unicode 字符,我在一个 JSON 对象中有一个测试字符串,我想把它放到 Couch 上。字符串格式如下(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 错误请求,如果查看日志,我会看到错误“词法错误:字符串中的无效字符”。
我已经使用 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 ö Å ü λ Ж 世界和平 ",...}
如果我查看请求的十六进制,荷鲁斯之眼字符被编码为 F0 93 82 80,根据https://codepoints.net/U+13080是正确的。不过,我得到了 UTF-8 错误。我错过了什么?CouchDB 在处理 unicode 标准中平面 1+ 的字符时是否有问题?
几乎不用说,如果我删除象形文字,一切都会很好。