Bin*_*gic 5 ruby character-encoding
我搜索了一个简单的解决方案的高低.没有一个是简单的或"只是工作".
首先,我不断收到此错误:
ArgumentError: invalid byte sequence in US-ASCII
Run Code Online (Sandbox Code Playgroud)
这是因为用户正在从Microsoft Word复制和粘贴内容.我只想要一种方法来清理用户输入,以便它以适当的格式存储在数据库中,无论它们发送给我的格式如何.即使它完全破坏了他们的输入,我也不关心它.我只是想强制将他们的输入编码为以后不会抱怨的东西.
我试过了:
ic = Iconv.new('US-ASCII//IGNORE', 'US-ASCII')
safe_string = ic.iconv(unsafe_string)
Run Code Online (Sandbox Code Playgroud)
执行上述操作并重新保存新字符串后,错误仍然存在.我试过了
safe_string = unsafe_string.force_encoding('US-ASCII')
Run Code Online (Sandbox Code Playgroud)
仍然给我错误.
我也尝试过使用UTF-8.一样.
在保存到数据库之前,我能做些什么来简单地转换它们的字符串吗?谢谢.
我想我自己找到了解决方案。因此,如果您想强制将字符串编码为当前编码,您可以执行以下操作:
safe_string = unsafe_string.encode('US-ASCII', :undef => :replace)
Run Code Online (Sandbox Code Playgroud)
但实际上,我建议使用 UTF-8。我不确定为什么我的默认编码设置为 US-ASCII,我假设 Rails 将默认编码设置为 UTF-8。无论如何,执行以下操作也解决了问题:
Encoding.default_internal = 'UTF-8'
Encoding.default_external = 'UTF-8'
Run Code Online (Sandbox Code Playgroud)
这被放入初始化程序中。如果有人有更好的建议请告诉我。但我相信 UTF-8 是最流行的编码,并且我在几个网站上读到它是推荐的编码。
谢谢。
| 归档时间: |
|
| 查看次数: |
658 次 |
| 最近记录: |