gpt4 book ai didi

ruby - 发送到服务器的 Unicode 字符作为垃圾返回

转载 作者:太空宇宙 更新时间:2023-11-03 16:51:48 24 4
gpt4 key购买 nike

更新:经过进一步调查,我设法将问题缩小到 json 编码器。直接传递输入工作正常,但通过 MultiJson.encode 传递输入是导致问题的原因。

我正在通过 curl 将以下内容发送到 restful 网络服务:

$ curl -v -X POST "http://my/url" -d "{\"body\": \"💳\"}"

您可能看不到的字符是 Credit Card emoji字符,即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 专家,但如有必要,可以提供更多详细信息。将不胜感激有人指出我正确的方向。谢谢!

最佳答案

首先要检查的是角色是否按照您认为的方式“进入”应用程序的主体。 Ruby 有一个默认的“内部”和“外部”编码的概念。一旦字符串通过各种 IO 进入,由于各种原因,它可能会或可能不会在传递时具有预期的编码。

这并不是说它难以管理或令人困惑——一切都非常简单,但我只是指出所有这些东西都可以配置/更改。

要查看您从什么开始,请尽快在您的程序中,一旦您有输入,请检查其编码。

params[:foo].encoding
=> #<Encoding:UTF-8>

如果它不是 utf-8,那么您需要设置您的环境和/或您的 IO 机制以使用 utf-8。

从 ruby​​ 2.0 开始,默认编码是——赞美上帝——utf8。因此,如果您没有使用 ruby​​ 2.0 但可以使用,请从升级到它开始。

如果您没有该选项,则需要设置默认编码。虽然it seems sinatra sets it to utf-8 .

关于ruby - 发送到服务器的 Unicode 字符作为垃圾返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19673050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com