PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Błąd kodowania postgres w aplikacji sidekiq

Tylko dlatego, że ciąg twierdzi, że jest UTF-8, nie oznacza, że ​​jest to UTF-8. \xe9 to é w ISO-8859-1 (AKA Latin-1), ale jest nieprawidłowy w UTF-8; podobnie, \xf1 to ñ w ISO-8859-1, ale nieprawidłowe w UTF-8. Sugeruje to, że ciąg jest w rzeczywistości zakodowany w ISO-8859-1, a nie UTF-8. Możesz to naprawić za pomocą kombinacji force_encoding aby poprawić zamieszanie Rubiego dotyczące bieżącego kodowania i kodowania aby ponownie zakodować go jako 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" 

Więc przed wysłaniem tego ciągu do bazy danych chcesz:

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

Niestety nie ma sposobu, aby wiarygodnie wykryć rzeczywiste kodowanie ciągu. Różne kodowania nakładają się na siebie i nie ma sposobu, aby stwierdzić, czy è (\xe8 w ISO-8859-1) lub č (\xe8 w ISO-8859-2) jest właściwą postacią bez ręcznego sprawdzania poprawności.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dziwne zachowanie w Postgresql

  2. Jak uzyskać kluczowe pola dla tabeli w funkcji plpgsql?

  3. Wstaw NULL do bazy danych PostgreSQL przez PHP, gdy pole daty jest puste

  4. Spring Boot data-jpa i nativeQuery Postgres cast

  5. Jak ustawić wartość pola zmiennej złożonej za pomocą dynamicznego SQL?