Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Caracter "~"

Olá!

Estou com uma dúvida em relação ao meu código. Quando comecei as atividades, executando o código do jogo da advinhação, utilizava meu nome, João, normalmente.

Depois que o código avançou e cresceu, quando insiro meu nome com o "~" ele me retorna um erro: incompatible character encodings: UTF-8 and CP850 (Encoding::CompatibilityError)

ja tentei utilizar o # encoding: UTF-8 mas sem sucesso.

Se eu tentar executar um novo código mais simples como:

puts "Insira nome: "
nome = gets

puts "Seu nome: " + nome

ele funciona normalmente e recebo a saída "João" sem problemas.

8 respostas

Oi João, tudo bem? Eu fiquei confuso com a sua dúvida, não entendi realmente qual era o problema, uma hora você diz que usar o acento dá problema, mas em outra hora não dá problema. Quando dá problema realmente?

O erro ocorre no código onde desenvolvi toda a atividade do jogo de adivinhação. Se entrar com meu nome com o acento ele apresenta o erro. Se eu criar um outro arquivo, com um código que apenas solicita o nome, armazena numa variável e depois imprime, a saída não apresenta erros. Ele imprime meu nome com o acento.

É importante lembrar que a codificação do arquivo precisa estar em UTF8, não adianta muito você utilizar aquele comentário de # encoding, se o arquivo estiver em uma codificação diferente. Já verificou isso? Você disponibilizar seu projeto pra que eu veja pessoalmente?

Bom, não sei dizer se o arquivo está com uma codificação diferente! De qualquer forma, segue o meu projeto:

def da_boas_vindas
    puts "Bem vindo ao jogo de advinhação!"
    puts "Qual é seu nome?"
    nome = gets.strip
    puts "\n\n\n\n"
    puts "Começaremos o jogo para você, #{nome}"
end

def pede_dificuldade
    puts "Qual o nível de dificuldade que deseja? (1 fácil, 5 dificil)"
    dificuldade = gets.to_i
end

def sorteia_numero_secreto(dificuldade)
    case dificuldade
    when 1
        maximo = 30
    when 2
        maximo = 60
    when 3
        maximo = 100
    when 4
        maximo = 150
    else
        maximo = 200
    end


    puts "Escolhendo um número secreto entre 0 e #{maximo - 1}..."
    sorteado = rand(maximo)
    puts "Escolhido... que tal advinhar hoje nosso numero secreto"
    return sorteado
end

def pede_um_numero(tentativa, limite_de_tentativas, chutes)
    puts "\n\n\n\n"    
    puts "Tentativa #{tentativa} de #{limite_de_tentativas}"
    puts "Chutes até agora: #{chutes}"
    puts "Entre com o numero: "
    chute = gets.strip
    puts "Sera que acertou? Voce chutou:" + chute
    chute.to_i
end

def verifica_se_acertou(numero_secreto, chute)
    acertou = numero_secreto == chute

    if acertou
        puts "Acertou!"
        return true
    end

    maior = numero_secreto > chute
    if maior
        puts "O número secreto é maior!"
    else
        puts "O número secreto é menor!"
    end
    false
end

da_boas_vindas
dificuldade = pede_dificuldade
numero_secreto = sorteia_numero_secreto(dificuldade)

pontos_ate_agora = 1000
limite_de_tentativas = 5
chutes = []

for tentativa in 1..limite_de_tentativas


    chute = pede_um_numero tentativa, limite_de_tentativas, chutes
    chutes << chute
    pontos_a_perder = (chute - numero_secreto).abs / 2.0
    pontos_ate_agora -= pontos_a_perder

    if verifica_se_acertou numero_secreto, chute
        break
    end
end

puts "Você ganhou #{pontos_ate_agora} pontos."

João, pode ser essa questão sim de codificação do próprio arquivo. acabei de testar seu projeto e funcionou sem problema algum, com acento ou sem acento, tudo funciona certinho. Por curiosidade, que editor de texto utilizou durante o curso e qual sistema operacional está usando, que versão do ruby está instalada?

Boa noite Wanderson,

Estou utilizando o sublime text 3 ruby: ruby 2.4.2p198 (2017-09-14 revision 59899) [x64-mingw32] Windows 10 pro x64

O engraçado é que, como disse anteriormente, se eu criar um novo arquivo, com um código simples apenas solicitando o nome ele funciona sem problema.

solução!

Oi João, já tentou copiar todo o código para o novo arquivo? Isso é muito estranho mesmo. Não estou conseguindo imaginar o que pode ser. Você está usando a versão mais recente do Ruby então isso pode ser algum problema no runtime do WIndows mesmo.

O Ruby não é oficialmente suportado no Windows até onde sei, então pode ser algo nessa linha, mas se um trecho de código mais simples funciona, fica muito esquisito um mais complexo que envolve a mesma funcionalidade, não.

Realmente parece ser uma particularidade do windows. Migrei para o Linux hoje e não tive mais problemas. Agradeço a atenção!