Recodifique caracteres do Windows-1252 como UTF-8

Você está lidando com strings ” u008a” ou ” u009a” em seu banco de dados. Eles são renderizados corretamente como “Š” ou “š” em um navegador, mas você não pode exibi-los em um console de linha de comando. Ruby diz que eles são uma codificação “UTF-8 válida”.

Na realidade, essas são strings codificadas em windows-1252 que foram interpretadas incorretamente como UTF-8 e, como tal, são mapeadas para o bloco de suplemento Unicode Latin-1 .

Felizmente, os caracteres de 0080 a 009F, abrangendo toda a codificação windows-1252, não podem ser impressos em Unicode, então é perfeitamente seguro presumir que são caracteres windows-1252 interpretados incorretamente, para poder combiná-los e recodificá-los.

Use esta função para recodificá-los para UTF-8 adequado:

def recode_windows_1252_to_utf8(string)
string.gsub(/[u0080-u009F]/) {|x| x.getbyte(1).chr.
force_encoding
('windows-1252').encode('utf-8') }
end

Aqui estamos removendo o primeiro byte da codificação (errada) da codificação utf-8 (0xc2), criando uma nova string de caractere único com o segundo byte e dizendo ao Ruby que é windows-1252 e deixando o próprio Ruby fazer a codificação para utf- 8