2010-10-22 28 views
7

Tôi đã nâng cấp lên RoR 3.0.1 và Ruby thành 1.9.2. Bây giờ tất cả các chuỗi trong quan điểm của tôi là ASCII-8BIT?Tại sao tất cả các chuỗi ASCII-8BIT sau khi tôi nâng cấp lên Rails 3?

Tôi tin rằng tôi đã ứng dụng của tôi thiết lập để sử dụng UTF 8

application.rb

config.encoding = "utf-8" 

database.yml

development: 
    adapter: mysql 
    encoding: utf8 

Tôi đang chạy

OS X 
RVM rvm 1.0.16 
Ruby ruby-1.9.2-p0 
Rails 3.0.1 

tôi mong đợi rằng enoding sẽ là UTF 8 không ASCII

business.desc.encoding 
# ASCII-8BIT 

Kể từ 1.9.x có thể nối chuỗi mã hóa khác nhau chúng ta thấy rất nhiều lỗi như thế này.

<p class="description"><%= truncate(business.desc, :length => 17) %></p> 

Các Lỗi

incompatible character encodings: ASCII-8BIT and UTF-8 

activesupport (3.0.1) lib/active_support/core_ext/string/output_safety.rb:74:in `concat' 
activesupport (3.0.1) lib/active_support/core_ext/string/output_safety.rb:74:in `concat' 
actionpack (3.0.1) lib/action_view/template/handlers/erb.rb:14:in `<<' 
app/views/browse/businesses.html.erb:15:in `block in _app_views_browse_businesses_html_erb___1616718260917998189_2173630500__1134905695726531092' 
app/views/browse/businesses.html.erb:3:in `each' 
app/views/browse/businesses.html.erb:3:in `each_with_index' 
app/views/browse/businesses.html.erb:3:in `_app_views_browse_businesses_html_erb___1616718260917998189_2173630500__1134905695726531092' 

Có ai khác có vấn đề này? Có phải ruby-1.9.2-p0 là phiên bản chính xác để sử dụng không?

Cảm ơn!

+0

Cơ sở dữ liệu của bạn thực sự nằm trong utf-8, vì bảng mã arg không xác định mã hóa cơ sở dữ liệu. Bạn có thể có một cơ sở dữ liệu trong mã hóa khác – shingara

Trả lời

4

Bạn cần thêm điều này vào mọi thứ.rb file:

<% # coding: UTF-8 %> 

Tôi sử dụng ma thuật_encoding cho điều đó.

$ cd app/ 
$ magic_encoding 

Mặc định là UTF-8, nhưng bạn có thể chỉ định bất kỳ điều gì bạn muốn làm đối số.

6

vấn đề khủng khiếp. Bạn cần đặt số này ở đầu mỗi tệp

# coding: UTF-8 

CẬP NHẬT Sử dụng magic_encoding như được mô tả là Nerian.

Thực chất giống như bên dưới, nhưng tốt hơn.

/UPDATE

Tôi có một nhiệm vụ cào Tôi không nhớ nơi tôi tìm thấy (thanh danh cho anh chàng đó!) Mà tôi đã chút thay đổi, để có điều này trên đầu trang của mỗi tập tin. Tôi đã nghe mọi người nói ở trên (những gì bạn đã làm) nên là đủ, nhưng nó không làm việc cho tôi ...

Nhưng dù sao, đây là nhiệm vụ cào, chỉ cần sao chép dán nó


lib/tasks/utf8encode.rake 

# coding: UTF-8 

desc "Manage the encoding header of Ruby files" 
task :utf8_encode_headers => :environment do 
    files = Array.new 
    ["*.rb", "*.rake"].each do |extension| 
    files.concat(Dir[ File.join(Dir.getwd.split(/\\/), "**", extension) ]) 
    end 

    files.each do |file| 
    content = File.read(file) 
    next if content[0..16] == "# coding: UTF-8\n\n" || 
      content[0..22] == "# -*- coding: utf-8 -*-" 

    ["\n\n", "\n"].each do |file_end| 
     content = content.gsub(/(# encoding: UTF-8#{file_end})|(# coding: UTF-8#{file_end})|(# -*- coding: UTF-8 -*-#{file_end})|(# -*- coding: utf-8 -*-#{file_end})/i, "") 
    end 

    new_file = File.open(file, "w") 
    new_file.write("# coding: UTF-8\n\n"+content) 
    new_file.close 
    end 
end 
2

Tôi đang chuyển từ Ruby 1.8.6 và Rails 2.3.5 sang Ruby 1.9.2 và Rails 3.0.3, với postregsql. Để làm việc này trên dự án của tôi, tôi đã phải làm thêm video này vào phía trên cùng của bất kỳ xem mẫu của tôi mà đã được dịch:

<% # coding: UTF-8 %> 

Nhiệm vụ cào được cung cấp bởi Ole nên dễ sửa đổi để làm điều này là tốt. Tôi đã không tìm thấy giải pháp của mình như được đưa ra có bất kỳ tác dụng, mặc dù.

+0

Hah ... có vẻ như tôi đã bị đánh bại bởi 20 phút! Cơ hội cho câu hỏi 3 tháng tuổi là gì. Đó là một mẹo hay về gem_ magic code - tôi chắc chắn sẽ cố gắng với bản thân mình. –

Các vấn đề liên quan