在Ruby 1.9中出现了ASCII-8BIT和UTF-8字符编码不兼容的问题。

7
我在使用Ruby 1.9和Rails 2.3.4时遇到了以下错误。当用户提交非ASCII标准字符时会出现此问题。
我阅读了很多在线资源,但似乎没有一个解决方案是有效的。
我尝试使用(如一些资源建议的):
string.force_encoding('utf-8') 

但是它没有帮助。

有什么想法可以解决这个问题吗?是否有一种方法可以在保存到数据库之前消除这些字符?或者,是否有一种方法可以使它们显示出来?


4
关于此事,Yehuda Katz的博客上有一篇不错的文章:http://yehudakatz.com/2010/05/17/encodings-unabridged/ - makevoid
我已经为此奋斗了一段时间。Mysql2宝石无法工作,也没有其他建议的解决方案可以使用。对于可能偶然遇到此问题的其他搜索者:如果您在mysql中使用blob或其他数据类型,请将其更改为字符串或文本。它可以保持编码,而且不再有令人头痛的问题。 - Damien Roche
2个回答

11

1
谢谢,这对我非常有效。但请注意,mysql2 v0.3.* 在 Rails 3.0.7 中会抛出错误。 - aNoble
1
我在使用rack-webconsole时遇到了“不兼容的字符编码:ASCII-8BIT和UTF-8”的问题,然后我找到了这篇文章。感谢@Jhony Fung! - Ben Kreeger

1

我对Ruby(或Rails)了解不多,但我想问题是由于您无法控制字符编码引起的。

首先,您应该决定在数据库中存储哪种编码。然后,您需要确保在将所有文本存储到数据库之前将其转换为该编码。为了做到这一点,您首先需要知道它使用的编码是哪个。

一个经常重复的建议是尽快将所有输入从它使用的任何编码解码为unicode(如果您的语言支持),然后在获得控制权后立即进行处理。然后,您就知道程序中处理的所有文本都是unicode。在另一端,在输出之前,将文本编码为您想要的任何输出编码。

关键是始终知道代码中任何给定位置的文本使用的编码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接