sql >> Database >  >> RDS >> PostgreSQL

postgres-coderingsfout in sidekiq-app

Alleen omdat de string beweert UTF-8 te zijn, wil nog niet zeggen dat het UTF-8 is. \xe9 is é in ISO-8859-1 (ook bekend als Latin-1) maar het is ongeldig in UTF-8; op dezelfde manier, \xf1 is ñ in ISO-8859-1 maar ongeldig in UTF-8. Dat suggereert dat de string eigenlijk is gecodeerd in ISO-8859-1 in plaats van UTF-8. Je kunt het oplossen met een combinatie van force_encoding om Ruby's verwarring over de huidige codering te corrigeren en encode om het opnieuw te coderen als 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" 

Dus voordat je die string naar de database stuurt die je wilt:

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

Helaas is er geen manier om de echte codering van een string op betrouwbare wijze te detecteren. De verschillende coderingen overlappen elkaar en er is geen manier om te zeggen of è (\xe8 in ISO-8859-1) of č (\xe8 in ISO-8859-2) is het juiste teken zonder handmatige controle op gezond verstand.




  1. Onderhoud van SQL Server-systeemdatabases

  2. Nieuwe databron (mysql) wildfly toevoegen

  3. Kan de mysql.plugin-tabel niet openen. Sommige plug-ins zijn mogelijk niet geladen

  4. Python MySQL - SELECT's werken, maar niet DELETE's?