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

Rails 3, Heroku:Taps Server Error:PGError:ERROR:sequência de bytes inválida para codificação UTF8:0xba


O sinal numérico , º , é 0xBA em ISO-8869-1 não UTF-8. Portanto, seu arquivo CSV está codificado com Latin-1, mas você está tentando armazená-lo em seu banco de dados como UTF-8 sem corrigir a codificação.

Você pode tentar dizer à sua biblioteca CSV que ela está lidando com texto codificado em Latin-1 e talvez ela cuide da conversão para UTF-8. Se isso não funcionar, você pode fazer isso sozinho com Iconv :
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xba")
 => ["º"]
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xb0")
 => ["°"]

Você não está tendo problemas com o SQLite porque o SQLite tende a ser muito tolerante e tem um sistema de tipos muito flexível. O PostgreSQL, OTOH, tende a ser bastante rigoroso e reclama adequadamente se você tentar alimentá-lo com dados inválidos. Eu recomendo que você pare de desenvolver em cima do SQLite se você for implantar no Heroku e no PostgreSQL, existem outras diferenças que causarão problemas (o comportamento de GROUP BY e LIKE por exemplo).