【问题标题】:Ruby encoding questionRuby编码问题
【发布时间】:2011-08-05 05:07:16
【问题描述】:

我正在将抓取的数据保存到网络应用程序中,这是一个示例参数:

400\xB0F.

这是来自网站的“学位”字符,但是当我将它放入我的模型时,我得到了可怕的 invalid byte sequence in UTF-8 错误。

由于它来自网络,我想我可能会尝试一些客户端编码,所以 javascript 将其转换为:400%B0F. 这至少可以由 ActiveRecord 毫无问题地保存,但 Rails 似乎又在出路,这样这些实体就不会被浏览器解码,所以我的show 方法会显示整个编码字符串。

我应该在哪里清理我的输入数据,哪些方法最适合用于不可预测的输入?

谢谢!

【问题讨论】:

  • 网站好像是用 CP-1252 编码的。不过,我不确定您将如何解码,抱歉。
  • 如果我是你,我会查找如何使用 String.encode 方法来实现编码之间的转换。

标签: html ruby-on-rails ruby ruby-on-rails-3 encoding


【解决方案1】:

几年前,我在 builder 中遇到并解决了同样的问题。看一下to_xs方法:http://builder.rubyforge.org/classes/String.html#M000007

您可以要求构建器,并直接使用它(您可能希望将false 传递给转义,否则您将获得实体转义输出)。要么这样,要么干脆窃取和改编源代码。

更新:这是原始的独立库: http://intertwingly.net/stories/2005/09/28/xchar.rb

【讨论】:

  • 哇哦,来自 Sam Ruby 的回答。我都是个书呆子! ;-)
【解决方案2】:

也许您可以在表单标记中使用带有 enctype="multipart/form-data" 的二进制表单(如上传文件)。像这样,您可以将此数据用作二进制数据吗?

这可能取决于您如何处理这些数据。

【讨论】:

    【解决方案3】:

    URI.unescape 是诀窍,在我在客户端对其进行编码之后

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 2016-03-16
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多