2011年4月14日

[ruby-list:47966] CSV.read で読むとUTF-8の扱いがおかしい?

出沢です

CSV を通すと、文字列の扱いに理解に苦しむ結果となりました。
UTF-8な日本語が == 演算で文字定数と一致してくれないのです。

下のようなデータファイルが有ります
===
$ cat test

"製品名"
===

これを次のプログラムを通すと、、、、
CSV.parseの様な結果を期待してるのですが、CSV.read、CSV.foreachではそう
なってくれません。
一度に読めるCSV.read を使いたいのですが、これでうまく行かないのはなぜで
しょう。
ruby1.8 では皆 true になります

rubyのバージョンは
$ ruby1.8 -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]
$ ^8^9
ruby1.9 -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i486-linux]

===
#!/usr/bin/ruby1.9
# coding: UTF-8

require 'csv'
require 'pp'

str="製品名"
csvread= CSV.read("./test")[0][0]
csveach=""
CSV.foreach("./test") do |row|
csveach = row[0];break
end

file = open("./test","r")
fstr = file.gets
csvgets = CSV.parse(fstr)[0][0]

puts str == csvread #=> false
puts str == csveach #=> false
puts str == csvgets #=> true

puts str #=>製品名
puts csvread #=>製品名
puts csveach #=>製品名
puts csvgets #=>製品名

pp str #=>"製品名"
pp csvread #=>"\xE8\xA3\xBD\xE5\x93\x81\xE5\x90\x8D"
pp csveach #=>"\xE8\xA3\xBD\xE5\x93\x81\xE5\x90\x8D"
pp csvgets #=>"製品名"

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




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