2012-07-13 35 views
6

Tôi đã nhận lỗi incompatible character encodings: UTF-8 and ASCII-8BIT, khi xem tìm thấy trong cơ sở dữ liệu một số nhân vật như: N, A, E, vvLỗi: không tương thích nhân vật mã hóa: UTF-8 và ASCII-8 bit

môi trường của tôi là:

  • Rails: 3.2.5
  • Ruby: 1.9.4p194
  • Cơ sở dữ liệu: Oracle 10g (10.2.0.1.0)

Tôi có thể lưu các ký tự này trong cơ sở dữ liệu, sử dụng Toad.

Tôi cố gắng để viết những dòng này, trong dòng đầu tiên của quan điểm của tôi:

<% # encoding: utf-8 %> 

Trong enviroment.erb

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

Nhưng không có gì cố định này.

Xin vui lòng, ai đó có thể đưa ra một số lời khuyên để sửa lỗi này.

Cảm ơn.

+0

Cơ sở dữ liệu và bộ ký tự quốc gia là gì? 'select * từ v $ nls_parameter trong đó tham số như '% CHARACTERSET''? –

+0

Như được đề xuất trong http://stackoverflow.com/questions/1779740/incompatible-character-encodings-ascii-8bit-and-utf-8-in-ruby-1-9 bạn nên đọc và hiểu mã hóa ký tự. Các liên kết được đề xuất là một nơi tốt để bắt đầu. –

+0

cảm ơn @JustinCave cho câu trả lời của bạn, tôi sẽ kiểm tra điều này. –

Trả lời

0

Trong tập tin boot.rb tôi đã thêm dòng này:

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

Whit này tôi giải quyết vấn đề của tôi.

5

Tôi có cùng vấn đề và tôi đã giải quyết vấn đề này sau nhiều giờ tìm kiếm bằng miếng vá khỉ.

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 
Các vấn đề liên quan