Проблемы с кодировкой Ruby / Sqlite3 - PullRequest
0 голосов
/ 24 ноября 2011

У меня проблемы с кодированием:

db = SQLite3::Database.new "encoding.db"
=> #<SQLite3::Database:0x9b69cbc>

db.encoding
=> #<Encoding:UTF-16LE>

r1 = db.execute("select * from db_log_sink limit 2").first.last
=> "\u7953\u7473\u6D65\u5420\u6D69\u7A65\u6E6F\u3A65\u4520\u5453\u2F20\u4520\u5444\x0A"

r2 = db.execute("select * from db_log_sink limit 2").last.last
=> "????????\u0A3A"

r1.encoding
=> #<Encoding:UTF-16LE>

r2.encoding
=> #<Encoding:UTF-8>

Работа в командной строке Linux с тем же файлом, который я получаю:

select * from db_log_sink limit 2;
1|2011-11-16T12:02:15|0|System Timezone: EST / EDT
2|2011-11-16T12:02:15|0|Server Hostnames:

В браузере r2 выходит как традиционный китайский хан. r1 выглядит как нормально отформатированный текст.

Примерно половина записей в текстовых столбцах искажается при использовании gem / ruby. Все выглядит нормально в командной строке Linux и с использованием SQLiteSpy под Windows.

До сих пор я пробовал ~ 20 sqlite баз данных, и все они показывают одинаковое поведение.

При необходимости я могу предоставить ссылку для загрузки файла базы данных.

Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 26 ноября 2011

Найден обходной путь:

r2.unpack('U*').pack('v*').force_encoding('utf-8') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...