Ruby on Rails Oracle编码

4
我在我的Oracle RoR组合中似乎无法正确编码。 Oracle数据库中的信息似乎已经正确编码了。当通过SQL查找需要特殊编码的属性时,我得到例如'Straße',这正是我期望的。但是当从我的RoR应用程序请求相同的属性时,我得到'Stra?e',显然是不正确的。

  • Oracle服务器上ENV中的NLS_LANG = AMERICAN_AMERICA.AL32UTF8
  • RoR应用程序中database.yml中的编码= utf8
  • Oracle dbase的NLS_NCHAR_CHARACTERSET = AL16UTF16

我尝试了一些不同的方法,改变上述参数,但没有任何作用。

有没有什么好主意?


你使用的驱动程序是什么?是Oracle-enhanced吗? - Mark Thomas
马克,是的我是。我刚发现在我的开发机器环境中添加 NLS_LANG="AMERICAN_AMERICA.UTF8" 后问题已经解决了。在我的生产机器上我尝试了相同的方法但没有成功。我还在htaccess中添加了 AddDefaultCharset UTF-8,但那也没能解决它。希望得到任何帮助。 - Rutger
开发环境和生产环境中的 Ruby 版本是否不同? - Mark Thomas
两个不同补丁的 Ruby 1.8.7 - Rutger
4个回答

7
...\config\boot.rb中添加ENV['NLS_LANG'] ||= 'AMERICAN_AMERICA.UTF8',这样就可以在所有环境上运行了。

4

我在网上找到的解决方案都没有起作用,但是在阅读了ruby-oci8宝石的源代码后,将以下内容放入config\boot.rb中:

ENV['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8' DEFAULT_OCI8_ENCODING = 'utf-8'

对我有用。


1

在加载应用程序之前,先运行它

OCI8.encoding=Encoding.default_internal

你可以在config/boot.rb的第一行上进行操作。
ENV['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8'

这将确保您的字符串在进入数据库时处于utf8格式。

如果您能解释一下为什么这个解决方案可以解决 OP 最初的问题,那将会非常有帮助。如果未来的用户和 OP 不理解您所做的事情,那么仅仅给出代码的答案通常并不是非常有用的。请在您的答案中添加一些上下文信息。 - d_kennetz

0

解决问题的方法是降级我的 Oracle Enhance Gem。


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