[#47955] るびま記事募集:FiberとかSinatra/PadrinoとかBundlerとか — Makoto Kuwata <kwa@...>

桑田といいます。るびま編集部に入りました。

17 messages 2011/04/11

[#48016] 文字列を正規表現にマッチする部分と他の部分に分割 — "5.5" <5.5@...>

5.5 です。

12 messages 2011/04/28

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

From: Dezawa <dezawa@...>
Date: 2011-04-14 00:00:46 UTC
List: ruby-list #47966
出沢です

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          #=>"製品名"


In This Thread

Prev Next