【发布时间】:2013-06-03 23:10:40
【问题描述】:
我有一个 Rails 应用程序从 Rails 版本 1 的迁移中幸存下来,我想忽略它上面的 所有 无效字节序列,以保持向后兼容性。
我不知道输入编码。
示例:
> "- Men\xFC -".split("n")
ArgumentError: invalid byte sequence in UTF-8
from (irb):4:in `split'
from (irb):4
from /home/fotanus/.rvm/rubies/ruby-2.0.0-rc2/bin/irb:16:in `<main>'
我可以用一行代码解决这个问题,例如:
> "- Men\xFC -".unpack("C*").pack("U*").split("n")
=> ["- Me", "ü -"]
但是,我想始终忽略无效的字节序列并禁用此错误。在 Ruby 本身或 Rails 中。
【问题讨论】:
-
显示一些无效数据的样本。您的数据库或表中的编码是什么? Rails 需要与之匹配。 Data Rails 接收到的数据需要强制转换为数据库将存储的相同编码,否则您必须使用二进制 ASCII 或二进制 UTF-8 编码。
-
@fotanus:它适用于 ruby 1.8,因为 ruby 1.8 没有以相同的方式处理编码(事实上,根本没有)。参见例如yokolet.blogspot.com/2009/07/… 和 yehudakatz.com/2010/05/05/…
-
@Denis 谢谢,我知道它发生了变化,所以这就是我要解决这个问题的原因。
-
@theTinMan 添加示例
-
您可以尝试遍历所有字符串并将它们更改为有效的内容。另一个版本是重新打开
::String类并操作所有方法。顺便说一句,这看起来像是您的系统默认使用的标准 8 位编码。
标签: ruby-on-rails ruby encoding