Ruby 1.9-invalid multibyte char (US-ASCII)

Próbuję sprawić, aby moja aplikacja rails (2.3.5) działała na Rubim 1.9, mam taką funkcję, która dokonuje transformacji na łańcuchu znaków:

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

Ale kiedy próbuję uruchomić serwer, dostaję ten błąd:

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

Jak to zrobić w ruby 1.9? Nie wiem, czego mi tu brakuje

Author: Tiago, 2010-09-09

3 answers

Zapisz # encoding: utf-8 Na górze tego pliku. Zmienia to domyślne kodowanie wszystkich literałów typu string / regexp w tym pliku utf-8. Domyślnym kodowaniem dla wszystkich liter jest US-ASCII, które nie może reprezentować á.

 122
Author: Reactormonk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-11 04:46:22

Aby rozszerzyć zakres projektu, spróbuj: klejnot magic_encoding .

 3
Author: ohho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-09 06:18:18

Myślę, że można również zmienić wyrażenia regularne ze składni / re / na składnię (Regexp.nowe "re", nil, "n")

Na przykład instrukcja, o której wspomniałeś:

String.gsub! / á / ã / à / ä / â/, " a "

Zostanie:

String.gsub! (Regexp.nowe "á / ã / à / ä / â", nil, "n"), " a "

Więcej szczegółów tutaj:

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

 0
Author: Carlos Saltos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-23 16:20:53