Ruby / Sqlite3编码问题

时间:2011-11-23 22:51:33

标签: ruby sqlite encoding

我遇到编码问题:

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命令行中的所有内容都很正常,在Windows下使用SQLiteSpy。

到目前为止,我已经尝试过~20个sqlite数据库,它们都表现出相同的行为。

如果需要,我可以为db文件提供下载链接。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

找到解决方法:

r2.unpack('U*').pack('v*').force_encoding('utf-8')