RoR ASCII de 8 bits para a codificação UTF-8 com os não-latinos (cirílico) símbolos na Net::HTTP.get_response.corpo
-
13-12-2019 - |
Pergunta
Eu precisa para obter alguns dados via Net::HTTP, ele funciona bem, por que eu receber a resposta em ASCII de 8 bits.O problema é como codificar este utf8 e salvar todos os não-símbolos latinos?
Com @content.encode('utf-8', 'binary', :invalid => :replace,
:undef => :replace, :replace => '')
vou perder todos os cirílico símbolos
Com @content.encode('utf-8', 'binary')
eu fico "\xCB" from ASCII-8BIT to UTF-8
erro
Com @content.force_encoding("UTF-8)
eu fico ������ em vez de símbolos cirílico
Eu não consigo encontrar resposta com a pesquisa do google.
Solução
Problema é resolvido com
begin
cleaned = response.body.dup.force_encoding('UTF-8')
unless cleaned.valid_encoding?
cleaned = response.body.encode( 'UTF-8', 'Windows-1251' )
end
content = cleaned
rescue EncodingError
content.encode!( 'UTF-8', invalid: :replace, undef: :replace )
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow