【问题标题】:Error: Incompatible character encodings: UTF-8 and ASCII-8BIT错误:不兼容的字符编码:UTF-8 和 ASCII-8BIT
【发布时间】:2012-07-13 18:23:39
【问题描述】:

我收到错误incompatible character encodings: UTF-8 and ASCII-8BIT,当视图在数据库中发现一些字符时,例如:ñ、á、é 等。

我的环境是:

  • 导轨:3.2.5
  • 红宝石:1.9.4p194
  • 数据库:Oracle 10g (10.2.0.1.0)

我可以使用 Toad 将这些字符保存在数据库中。

我试着在第一行写这个:

<% # encoding: utf-8 %>

enviroment.erb

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

但没有解决这个问题。

请,有人可以提供一些建议来解决这个问题。

谢谢。

【问题讨论】:

  • 什么是数据库和国家字符集? select * from v$nls_parameter where parameter like '%CHARACTERSET'?
  • 按照stackoverflow.com/questions/1779740/… 的建议,您应该阅读并理解字符编码。建议的链接是一个很好的起点。
  • 感谢@JustinCave 的回答,我会检查一下。
  • @AdamHawkes 感谢您的评论,我会阅读链接以了解这一点。
  • @JustinCave 这是 sql 的结果:NLS_CHARACTERSER = WE8ISO8859P1 和 NLS_NCHAR_CHARACTERSET = AL16UTF16

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


【解决方案1】:

我也有同样的问题,经过几个小时的搜索后,我用猴子补丁解决了这个问题。

    module ActiveSupport #:nodoc:
      class SafeBuffer < String

        def safe_concat(value)
          value = force_utf8_encoding(value)
          raise SafeConcatError unless html_safe?
          original_concat(value)
        end

        def concat(value)
          value = force_utf8_encoding(value)
          if !html_safe? || value.html_safe?
            super(value)
          else
            super(ERB::Util.h(value))
          end
        end

        alias << concat

        private

        def force_utf8_encoding(value)
          self.force_encoding('UTF-8').html_safe unless self.encoding.name == 'UTF-8'
          value = (value).force_encoding('UTF-8').html_safe unless value.nil? || value.encoding.name == 'UTF-8'
          value
        end
      end
    end

【讨论】:

    【解决方案2】:

    在文件boot.rb中,我添加了这一行:

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

    这个我解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 1970-01-01
      • 2011-10-17
      • 2011-05-26
      • 2011-12-14
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多