2011年1月30日

[ruby-list:47792] Re: [].join.encoding # => #

成瀬です。

2011年1月29日12:40 5.5 <5.5@xxxxx>:
> Ruby 1.9.2 で,[].join の文字コードが Encoding::ASCII-8BIT になる
> ようです。
>
> [].join.encoding # => #<Encoding:ASCII-8BIT>
>

> Array#join は,典型的には文字の列を返してほしいので US-ASCII のほ
> うが良さそうに思うのですが,なぜ ASCII-8BIT なのでしょうか。

これは Ruby 側のバグですね、r30721 で修正しました。
報告ありがとうございました。


> これに気づいたのは,空配列を join したものを sqlite3 でデータベー
> スに書き込んだときに,文字列ではない変なものが書き込まれてしまっ
> たからです。
>
> str1="".encode("US-ASCII")
> str2="".encode("ASCII-8BIT")

ここはString#encode ではなく、String#force_encoding を使うべきです。

> require 'sqlite3'
> DB=SQLite3::Database.new "hogehoge.sqlite"
> DB.execute "CREATE TABLE words (word VARCHAR(255))"
> DB.execute "INSERT INTO words (word) VALUES (?)", str1
> DB.execute "INSERT INTO words (word) VALUES (?)", str2
>
> 上記のコードで,二つめのレコードには,謎のバイト列(?)が入り
> ます。Firefox の SQLite Manager で見ると,「X''」のように見えます。
>
> これは,SQLite3::Datababase に ASCII-8BIT な文字列を渡すのが悪い
> のか,sqlite3 の動作が不適当なのか,どちらでしょうか。

で、こっちは sqlite3-ruby のバグに見えるんですが、手元で再現しない気がする。
普通に SELECT で返すんだとダメなのかな

--
NARUSE, Yui
naruse@xxxxx


投稿者 xml-rpc : 2011年1月30日 00:51
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/101667
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。