Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Exibição de letras latinas

Estou tentando passar para o programa uma palavra ou frase que contém acentuação gráfica através do "gets" e o mesmo desconhece essas letras.

teste.rb:

# language: pt
# encoding UTF-8

text = "acentuação gráfica"
puts text
text = gets
puts text

Executando ruby teste.rb:

acentuação gráfica
acentuação gráfica   #gets
acentua��o gr�fica

Quando a acentuação é passada como uma variável dentro do código, executa sem problemas, mas quando é passado pelo teclado da problema.

Já tentei por varias soluções pela internet como:

ActiveSupport::Inflector.transliterate(text) #ou
I18n.transliterate(text) #ou
text.parameterize

que me devolveram "acentua??o gr?fica". Teve também outros métodos que me geraram o erro "invalid byte sequence in UTF-8 (ArgumentError)".

Alguém que já passou por isso consegue me ajudar?

10 respostas

Você usa um editor de texto (ex.: Notepad++, Sublime) ou uma IDE (Netbeans)?

No último caso, às vezes é preciso configurar o encoding do próprio console onde a saída vai ser exibida.

Caso isso não resolva, você pode tentar colocar a seguinte linha no código de configuração:

export LC_ALL=en_US.UTF-8

Fontes:

http://www.leidemer.com/blog/resolvendo-problemas-com-acentos-em-ruby/ http://www.guj.com.br/t/acentuacao-na-saida-do-ruby/283751/2

Estou usando Visual Studio Code e executando pelo Cmder

Gal, creio que o problema esteja no cmder. Pra resolver, roda o seguinte comando no cmder:

chcp utf8

Isso vai configurar o UTF-8 como padrão. Depois disso, roda o teu programa e a saída já deverá apresentar os acentos.

Caso o comando acima não funcione, roda:

chcp 65001 & cmd

Agora fiquei com espaço no lugar daqueles sinais

acentuação gráfica  
acentuação gráfica   #gets
acentua  o gr fica  

Tentou os dois comandos?

Se tentou com os dois, aí é possível que seja algo no código, uma vez que esses comandos tornam a exibição em UTF8 como a padrão.

ao tentar o "chcp utf8" ele me retorna:

Formato de parâmetro incorreto - utf8

o comando "chcp 65001 & cmd" me troca o prompt mesmo, mas quando executo o código:

acentuação gráfica  
acentuação gráfica   #gets
acentua  o gr fica 

o código é bem simples, do jeito que escrevi a cima. gostaria de saber se tem alguma classe que trata esse caso ou até substitui essas letras pelas "normais"? que a final só quero fazer uma comparação de valores, do texto escrito onde estou pesquisando com o texto de entrada pelo gets, e retornar um boolean.

Creio que não me expressei do jeito certo. O chcp 65001 tem que ir no código.

Ex.:

# encoding: utf-8
chcp 65001

text = "acentuação gráfica"
puts text
text = gets
puts text

A fonte que o console está usando também pode ser um problema. É importante que seja uma que suporte UNICODE, como Lucinda Console ou Consolas.

solução!

Quanto ao que você falou por último, entendi que letras normais seria o processo de tirar os acentos e exibir uma mensagem sem "caracteres especiais".

Nesse caso, existe o método transliterate que troca os caracteres especiais por suas versões sem acento. Caso você usasse esse método, funcionaria assim:

ActiveSupport::Inflector.transliterate('aäoöuü') 
# => "aaeooeuue"

Ou seja, todos os caracteres ali entre parênteses são substituídos. No teu caso, é só colocar o nome da variável.