【问题标题】:Ruby on Rails Oracle encodingRuby on Rails Oracle 编码
【发布时间】:2012-02-17 16:07:19
【问题描述】:

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

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

我通过更改上面的参数尝试了几种不同的方法,但没有任何效果。

有人有好主意吗?

【问题讨论】:

  • 您使用的是什么驱动程序? Oracle 增强型?
  • 马克,是的,我是。我刚刚发现通过将 NLS_LANG="AMERICAN_AMERICA.UTF8" 添加到我的开发机器的环境中,问题在那里得到了解决。在我的生产机器上,我尝试了同样的方法,但没有运气。我还在 htaccess 中添加了 AddDefaultCharset UTF-8,但这也没有解决它。任何帮助表示赞赏。
  • 开发版和生产版的Ruby版本不同吗?
  • 两个 ruby​​ 1.8.7(不同的补丁)

标签: ruby-on-rails ruby oracle encoding utf-8


【解决方案1】:

有效的方法是降级我的 oracle 增强 gem

【讨论】:

    【解决方案2】:

    ENV['NLS_LANG'] ||= 'AMERICAN_AMERICA.UTF8' 添加到...\config\boot.rb,它将适用于所有环境。

    【讨论】:

      【解决方案3】:

      我在网上找到的解决方案都没有奏效,但在阅读了 ruby​​-oci8 gem 的源代码后,输入:

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

      config\boot.rb 为我工作。

      【讨论】:

        【解决方案4】:

        在加载应用程序之前运行

        OCI8.encoding=Encoding.default_internal
        

        你也可以在 config/boot.rb 的第一行放置

        ENV['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8'
        

        这确保你的字符串在进入数据库时​​将是 utf8 格式

        【讨论】:

        • 如果您能解释为什么这可以解决 OP 的原始问题,那将会很有帮助。如果将来的用户和 OP 不了解您所做的事情,仅代码的答案通常对他们没有太大帮助。请在您的答案中添加一些上下文。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-15
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多