PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

erro de codificação postgres no aplicativo sidekiq


Só porque a string afirma ser UTF-8 não significa que seja UTF-8. \xe9 é é em ISO-8859-1 (AKA Latin-1) mas é inválido em UTF-8; da mesma forma, \xf1 é ñ em ISO-8859-1, mas inválido em UTF-8. Isso sugere que a string está realmente codificada em ISO-8859-1 em vez de UTF-8. Você pode corrigi-lo com uma combinação de force_encoding para corrigir a confusão do Ruby sobre a codificação atual e encode para recodificá-lo como UTF-8:
> "Tweets en Ingl\xE9s y en Espa\xF1ol".force_encoding('iso-8859-1').encode('utf-8')
=> "Tweets en Inglés y en Español" 

Portanto, antes de enviar essa string para o banco de dados, você deseja:
name = name.force_encoding('iso-8859-1').encode('utf-8')

Infelizmente, não há como detectar com segurança a codificação real de uma string. As várias codificações se sobrepõem e não há como saber se è (\xe8 em ISO-8859-1) ou č (\xe8 na ISO-8859-2) é o caractere certo sem verificação manual de sanidade.