web-dev-qa-db-ja.com

Ruby 1.9-無効なマルチバイト文字(US-ASCII)

Railsアプリケーション(2.3.5)で実行するRuby 1.9、文字列にいくつかの変換を行うこの関数がある:

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

しかし、サーバーを起動しようとすると、次のエラーが表示されました。

<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'
                ^

from:29:in `require '

Ruby 1.9でこれを行う正しい方法は何ですか?ここで何が欠けているのか分かりません

46
Tiago

そのファイルの上に# encoding: utf-8を書き込みます。これにより、そのファイルutf-8内のすべての文字列/正規表現リテラルのデフォルトエンコーディングが変更されます。すべてのリテラルのデフォルトのエンコードはUS-ASCIIであり、áを表すことはできません。

122
Reactormonk

プロジェクト全体に適用するには、 magic_encoding gemを試してください。

3
ohho

正規表現を構文/ re /から構文(Regexp.new 're'、nil、 'n')に変更することもできると思います

たとえば、あなたが言及した指示:

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

となります:

string.gsub! (Regexp.new 'á|ã|à|ä|â'、nil、 'n')、 'a'

詳細はこちら:

http://www.Ruby-forum.com/topic/18341

0
Carlos Saltos