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でこれを行う正しい方法は何ですか?ここで何が欠けているのか分かりません
そのファイルの上に# encoding: utf-8
を書き込みます。これにより、そのファイルutf-8
内のすべての文字列/正規表現リテラルのデフォルトエンコーディングが変更されます。すべてのリテラルのデフォルトのエンコードはUS-ASCII
であり、á
を表すことはできません。
プロジェクト全体に適用するには、 magic_encoding gemを試してください。
正規表現を構文/ re /から構文(Regexp.new 're'、nil、 'n')に変更することもできると思います
たとえば、あなたが言及した指示:
string.gsub! /á|ã|à|ä|â/、 'a'
となります:
string.gsub! (Regexp.new 'á|ã|à|ä|â'、nil、 'n')、 'a'
詳細はこちら: