阅读JSON Sinatra时获取不正确的编码

时间:2016-08-26 08:15:12

标签: android json ruby retrofit

使用Sinatra我已经创建了一个Web服务器,现在我试图在那里传递一些数据。我使用Retrofit(android)和Gson作为转换器传递它。

这是一个logcat日志:

 --> POST http://192.168.88.147:4567/payload HTTP/1.1
Content-Type: application/json; charset=UTF-8
Content-Length: 245
[{"composition":"","name":"Чебурек с мясом","price":42,"type":"выпечка","weight":"100","mId":158},{"composition":"","name":"Ватрушка с картошкой","price":32,"type":"выпечка","weight":"100","mId":159}]
 --> END POST (245-byte body)
 <-- 200 OK http://192.168.88.147:4567/payload (164ms)
Content-Type: text/html;charset=utf-8
 Content-Length: 448
 X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
 X-Frame-Options: SAMEORIGIN
Connection: keep-alive
 D/OkHttp: Server: thin
 D/OkHttp: OkHttp-Sent-Millis: 1472197883936
 OkHttp-Received-Millis: 1472197884075
 [{"composition"=>"", "name"=>"\u0427\u0435\u0431\u0443\u0440\u0435\u043A \u0441 \u043C\u044F\u0441\u043E\u043C", "price"=>42, "type"=>"\u0432\u044B\u043F\u0435\u0447\u043A\u0430", "weight"=>"100", "mId"=>158}, {"composition"=>"", "name"=>"\u0412\u0430\u0442\u0440\u0443\u0448\u043A\u0430 \u0441 \u043A\u0430\u0440\u0442\u043E\u0448\u043A\u043E\u0439", "price"=>32, "type"=>"\u0432\u044B\u043F\u0435\u0447\u043A\u0430", "weight"=>"100", "mId"=>159}]
<-- END HTTP (448-byte body)

注意这是西里尔文。

以下是Ruby服务器端代码我是如何做到的:

post '/payload' do
  push = JSON.parse(request.body.read)
  push.inspect.force_encoding("UTF-8")
end

我使用了一些第三方在线解码器,它说这个不可读的文本是UTF16。

请帮我看看这里发生了什么。 我是Ruby的新手。

还要考虑重命名这个问题,因为我可能会滥用某些条款。

1 个答案:

答案 0 :(得分:0)

Windows 7 是问题所在。一旦我切换到Ubuntu(虚拟盒子),我就可以正确地使用任何编码\解码操作进行编码。