PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

errore di codifica postgres nell'app sidekiq

Solo perché la stringa afferma di essere UTF-8 non significa che sia UTF-8. \xe9 è é in ISO-8859-1 (AKA Latin-1) ma non è valido in UTF-8; allo stesso modo, \xf1 è ñ in ISO-8859-1 ma non valido in UTF-8. Ciò suggerisce che la stringa è effettivamente codificata in ISO-8859-1 anziché in UTF-8. Puoi risolverlo con una combinazione di force_encoding per correggere la confusione di Ruby sulla codifica corrente e encode per ricodificarlo come 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" 

Quindi prima di inviare quella stringa al database si desidera:

name = name.force_encoding('iso-8859-1').encode('utf-8')

Sfortunatamente, non c'è modo di rilevare in modo affidabile la vera codifica di una stringa. Le varie codifiche si sovrappongono e non c'è modo di sapere se č (\xe8 in ISO-8859-1) o č (\xe8 in ISO-8859-2) è il personaggio giusto senza il controllo manuale dell'integrità.