【问题标题】:ArgumentError: invalid byte sequence in UTF-8 when calling .blank?ArgumentError:调用 .blank 时 UTF-8 中的字节序列无效?
【发布时间】:2014-09-08 18:00:26
【问题描述】:

我刚刚升级到 Rails 3.0(不要评判!)和 Ruby 1.9.3,并且有一个客户端能够将一个字符串保存到数据库中,然后当在字符串上调用 .blank? 时阻塞 Rails。

我找到了一种在 Apache 级别阻止这些无效字节序列的方法,但想知道是否有人可以指导我准确了解该用户发送的内容。我自己无法解决。我猜这是某种表情符号?用户是真实的,即他们不是脚本小子或类似的东西。看起来他们使用的是三星 Android 平板电脑。

"sup boys what are you guys up to\xED\xA0\xBD\r\n "

更新:

查看我找到的日志:

"sup boys what are you guys up to\xED\xA0\xBD\r\n ????"

【问题讨论】:

  • 你试过查看mysql中的原始数据吗?转换可能发生在轨道末端。我知道to_json 错误地将表情符号转换为此类字符的问题。此外,您的生产日志是一个很好的查看位置。如果这些是请求参数,您可以从那里获取值。
  • 据我所知,这些数据在传入的过程中并没有什么特别的事情发生(Rails 可能会自动对其执行的操作除外)。
  • 是的,这就是我的建议 - 尝试查看入口点(生产日志)和持久状态(使用原始 mysql 查询),看看 rails 是否在这里进行了一些转换。另外,您的 application.rb 文件中的 config.encoding 值是什么?

标签: ruby-on-rails-3 character-encoding ruby-1.9.3


【解决方案1】:

通过在 ruby​​ 2.1 http://www.ruby-doc.org/core-2.1.3/String.html#method-i-scrub 中使用 String#scrub 删除无效字符来解决问题。这是 String#scrub 到 ruby​​ 1.9 和 2.0 https://github.com/hsbt/string-scrub 的反向移植

【讨论】:

猜你喜欢
  • 2015-07-04
  • 2016-07-05
  • 2013-08-20
  • 1970-01-01
  • 2012-06-19
  • 2017-03-31
  • 2022-10-05
  • 2012-12-11
  • 2023-04-03
相关资源
最近更新 更多