Ich bekomme die falsche Codierung von der jeremyevans-postgres-pr Adapter, die eine der Sequel empfiehlt.Wie verhindere ich, dass Sequels postgres-pr-Adapter Daten mit der falschen Kodierung zurückgibt?
Gibt es etwas, das ich falsch mache?
Beispielcode:
require 'postgres-pr/connection'
c = PostgresPR::Connection.new('blah', 'blah', 'blah')
row = c.query("select name, cost from remedium.prescription").rows.last
row.each do |f|
#f.force_encoding(Encoding::UTF_8) #-- uncomment this to 'fix' everything ;/
enc = f.kind_of?(String) ? f.encoding : ''
puts [f.class, f, f.inspect, enc].join(' ')
end
Ausgang:
String Paracelsium "Paracelsium" ASCII-8BIT
String £0.00 "\xC2\xA30.00" ASCII-8BIT
Unnötig zu sagen, bekomme ich die gleichen Ergebnisse von Sequel selbst. Und meine Datenbank ist nicht nach ASCII kodiert, sondern nach UTF8.
Gerade jetzt muß es PostgreSQL sprechen sowohl mit Ruby und JRuby, und es macht Sinn, zu versuchen, die gleiche Werkzeugkette jeweils zu verwenden, so ist dies der offensichtliche Adapter zu verwenden. Aber.
Die original adaptor, dass Jeremy gegabelt sich gleich verhält.
Ich kann dieses Problem beheben die Codierung auf der ganzen Linie durch zwingen, aber das wird ein königlicher Schmerz in allen meinen Code zu tun ...
einige zusätzliche Antworten, die ich sollte wohl haben zur Verfügung gestellt (danke):
- Versionen -> Centos 7; Ruby 2.3.1 & JRuby 9.1.1.0; gem Version 0.6.6
- OS Gebietsschema -> "LANG = de_DE.UTF-8"
- Ruby defaults -> Encoding.default_internal = nil; default_external = Kodierung :: UTF-8
Welche Ruby-Version verwenden Sie? Welches OS und welche Gebietsschemaeinstellung hat es? Was ist die Ausgabe von Encoding.default_internal und Encoding.default_external? Was passiert, wenn Sie das Skript wie folgt ausführen: "ruby -E UTF-8 meinskript.rb" –
Gute Fragen, danke. Das allgemeine Zeug habe ich oben beantwortet. Zu Ihrer letzten Frage: keine Änderung ... –
Nur um sicher zu sein: Können Sie die Ausgabe von "psql -l" überprüfen? Sollte die Verschlüsselung Ihrer DBs anzeigen. –