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

postgres-kodningsfejl i sidekiq-appen

Bare fordi strengen hævder at være UTF-8, betyder det ikke, at den er UTF-8. \xe9 er é i ISO-8859-1 (AKA Latin-1), men den er ugyldig i UTF-8; på samme måde \xf1 er ñ i ISO-8859-1, men ugyldig i UTF-8. Det tyder på, at strengen faktisk er kodet i ISO-8859-1 i stedet for UTF-8. Du kan rette det med en kombination af force_encoding for at rette op på Rubys forvirring om den aktuelle kodning og kodning for at omkode det som 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" 

Så før du sender den streng til databasen, vil du:

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

Desværre er der ingen måde at detektere en strengs rigtige kodning på. De forskellige kodninger overlapper hinanden, og der er ingen måde at sige om è (\xe8 i ISO-8859-1) eller č (\xe8 i ISO-8859-2) er det rigtige tegn uden manuel fornuftskontrol.




  1. Eksporter SQL-forespørgselsdata til Excel

  2. Hvordan man konverterer heltal til streng og får længden af ​​strengen

  3. Hvad er SQL Server-ækvivalenten til ELT() i MySQL?

  4. Konverter 'smalldatetime' til 'date' i SQL Server (T-SQL-eksempler)