更新:经过进一步调查,我设法将问题缩小到 json 编码器。直接通过输入工作正常,但通过它MultiJson.encode
是导致问题的原因。
我通过 curl 将以下内容发送到一个安静的 Web 服务:
$ curl -v -X POST "http://my/url" -d "{\"body\": \"\"}"
您可能看不到的字符是信用卡表情符号字符,即U+1F4B3。
我从服务中得到的响应基本上是:
< HTTP/1.1 200 OK
< Date: Wed, 30 Oct 2013 02:38:04 GMT
< Content-Type: application/json;charset=utf-8
< Content-Length: 266
< Connection: close
<
{ [data not shown]
100 304 100 266 100 38 936 133 --:--:-- --:--:-- --:--:-- 936
* Closing connection 0
{
"body": "\uf4b3"
}
这个编码的字符与我发送的不对应,我希望它以发送的形式返回(在这种情况下)。
我可以访问服务器的源代码。它建立在 Ruby、Sinatra 和 ActiveRecord 之上。在发送响应之前会进行一些处理:
- 首先传递内容
ERB::Util.html_escape
- 然后,通过应用一系列正则表达式
str.gsub!(reg, " ### ")
- 最后,通过返回响应
MultiJson.encode
我不是 Ruby 人,但如有必要,可以提供更多详细信息。将不胜感激有人指出我正确的方向。谢谢!