From: "5.5" <5.5@...> Date: 2011-01-29T12:40:48+09:00 Subject: [ruby-list:47790] [].join.encoding # => # 5.5 です。 Ruby 1.9.2 で,[].join の文字コードが Encoding::ASCII-8BIT になる ようです。 [].join.encoding # => # Array#join は,典型的には文字の列を返してほしいので US-ASCII のほ うが良さそうに思うのですが,なぜ ASCII-8BIT なのでしょうか。 これに気づいたのは,空配列を join したものを sqlite3 でデータベー スに書き込んだときに,文字列ではない変なものが書き込まれてしまっ たからです。 str1="".encode("US-ASCII") str2="".encode("ASCII-8BIT") 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 の動作が不適当なのか,どちらでしょうか。 使った Ruby とライブラリーは以下のとおりです。 ruby 1.9.2p0 (2010-08-18) [i386-mingw32] sqlite3 (1.3.3 x86-mingw32)