2010-09-09 32 views
45

Im cố gắng để làm cho ứng dụng đường ray của tôi (2.3.5) để chạy trên Ruby 1.9, tôi đã chức năng này mà làm cho một số biến đổi trên một chuỗi:của Ruby 1.9 - không hợp lệ multibyte char (US-ASCII)

def replace_special_chars(downcase = true) 
if downcase 
    string = self.downcase 
else 
    string = self 
end 
string.gsub! /á|ã|à|ä|â/, 'a' 
string.gsub! /é|è|ë|ê/, 'e' 
string.gsub! /í|ì|ï|î/, 'i' 
string.gsub! /ó|õ|ò|ô|ö/, 'o' 
string.gsub! /ú|ù|ü|û/, 'u' 
string.gsub! /ç/, 'c' 
string.gsub! /&/, 'e' 
string.gsub! /\s/, '-' 
string.gsub! /[^a-zA-Z_0-9-]/, '' 
string.gsub! /-(-)+/, '-' 
string 
end 

Nhưng khi tôi cố gắng để khởi động server, tôi đã nhận lỗi này:

<internal:lib/rubygems/custom_require>:29:in `require': 
/Users/.../lib/nzn_string.rb:11: invalid multibyte char (US-ASCII) (SyntaxError) 
/Users/.../lib/nzn_string.rb:11: invalid multibyte char (US-ASCII) 
/Users/.../lib/nzn_string.rb:11: syntax error, unexpected $end, expecting keyword_end 
string.gsub! /á|ã|à|ä|â/, 'a' 
       ^

từ: 29: trong `require'

đúng cách để làm điều này trên ruby ​​1.9 là gì? Tôi không biết mình thiếu gì ở đây

+0

thể trùng lặp của [không hợp lệ multibyte char (US-ASCII) với Ruby on Rails] (http://stackoverflow.com/questions/1739836/invalid-multibyte-char-us-ascii-with-ruby-on-rails) – meagar

+0

Liên kết này hữu ích và nó phù hợp với tôi [Stackoverflow câu trả lời] http://stackoverflow.com/questions/3916931/rails-3-invalid-multibyte-char-us-ascii?s=bed697c0-32eb-47d0-a22a-3b85ee418b0f#new-answer –

Trả lời

122

Viết # encoding: utf-8 trên đầu tệp đó. Điều đó thay đổi mã hóa mặc định của tất cả các chuỗi/regexp literals trong tập tin đó utf-8. Mã hóa mặc định cho tất cả các chữ là US-ASCII, không thể đại diện cho á.

+0

này. đã làm việc, cảm ơn bạn. Có cách nào để làm cho dự án này rộng không? – Tiago

+8

@Tiago: Có: Thêm dòng đó vào tất cả các tệp trong dự án của bạn. –

+0

@ Jörg> :) @Tiago chấp nhận và như vậy – Reactormonk

0

Tôi nghĩ bạn cũng có thể thay đổi regexps từ cú pháp/tái/to cú pháp (Regexp.new 'tái', nil, 'n')

Ví dụ, hướng dẫn bạn đề cập:

string.gsub!/á | ã | à | ä | â /, 'a'

sẽ trở thành:

string.gsub! (Regexp.new 'á | ã | a | ä | a', bằng không, 'n'), 'a'

Xem thêm chi tiết ở đây:

http://www.ruby-forum.com/topic/183413

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