/ / Qual é a maneira mais fácil de substituir todos os caracteres não ASCII por seus equivalentes ASCII em Ruby? [duplicado] - ruby, string, codificação

Qual é a maneira mais fácil de substituir todos os caracteres não ASCII com seus equivalentes ASCII em Ruby? [duplicado] - ruby, string, codificação

Duplicar Possível:
Transliteração em rubi

Eu estou procurando uma maneira simples de converter seqüências de caracteres como estas:

  • "spaß" para "spass"
  • "über" para "ueber"
  • etc.

Isso é necessário para gerar nomes de usuário válidos de nomes de pessoas.

Respostas:

6 para resposta № 1

Isso é chamado de transliteração. Uma aproximação disto (veja exemplos) pode ser executada usando o Iconv classe.

Tente um dos seguintes procedimentos (exija "iconv" primeiro):

Iconv.iconv("ascii//ignore//translit", "utf-8", string).to_s
Iconv.iconv("ascii//translit", "utf-8", string).to_s

irb(main):013:0> Iconv.iconv("ascii//translit", "utf-8", "spaß").to_s
=> "spass"
irb(main):014:0> Iconv.iconv("ascii//translit", "utf-8", "crêpes").to_s
=> "crepes"
irb(main):017:0> Iconv.iconv("ascii//translit", "utf-8", "über").to_s
=> "uber"

Há também um iconv utilitário de linha de comando. Mais informações sobre isso e alguns exemplos de Ruby (procure por "ruby") Aqui.

Uma alternativa para isso é Unidecode, o que eu acho que foi inspirado na implementação original do Perl. Eu não o usei em sua encarnação Ruby, mas ele deve fazer expansões multi-char (que aparentemente você quer) melhor.

Finalmente, se você estiver executando o Rails, poderá encontrar esta discussão interessante. Ele detalha algumas diferenças entre abordagens alternativas para transliteração e mostra uma maneira de fazer isso dentro do núcleo do Rails (ActiveSupport::Inflector.transliterate)