更新:经过进一步调查后,我设法将问题缩小到json编码器。直接传递输入工作正常,但通过MultiJson.encode
是什么导致了这个问题。发送到服务器的Unicode字符作为垃圾返回
我通过卷曲发送跟进到一个RESTful Web服务:
$ curl -v -X POST "http://my/url" -d "{\"body\": \"\"}"
,你可能无法看到的是Credit Card表情符号,这是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
- 首先,内容传递,一系列regexs的经由
str.gsub!(reg, " ### ")
- 最后施加时,响应经由返回
MultiJson.encode
我不是Ruby的人,但可以提供额外的细节,如果有必要。希望有人指出我正确的方向。谢谢!
不顺心的事在U + 1F4B3的编码。使用'\ u'符号,它应该显示为两个单元(代理对),但显然转换它的软件不准备处理非BMP字符(字符> U + FFFF),并且错误地将1F4B3屏蔽到F483 。 –
你没有告诉我们的东西:你的“服务器”是做什么的? :)它是否回应您发送的内容? –
@JohnBachir它创建一个对象来清理数据并将其存储在数据库中。它将所创建的对象序列化为JSON。 – twaddington