rubyからCGIを用いて、SQLiteへ接続し、文字列データをselectコマンドを使って取得したのですが、取得した文字列がユニコード表記(例\u30af)であり、これをUTF8に変換したいのですが、それができず悩んでいます。
ruby
11 hash = Hash.new #ハッシュ宣言 22 i=0 33 db=SQLite3::Database.new("test.db") #データベース接続 44 db.transaction do 55 db.execute('select * from votes;') do |key| #select文で取得した文字列をkeyに格納 66 if hash.has_key?(key) #ハッシュのキーにkeyの値が使用されていたら、そのバリューの数値を+1する。 77 hash[key]+=1 88 else #keyの値が使用されていなかったら、バリューの値を1とする。 99 hash[key]=1 1010 end 1111 i=i+1 1212 end 1313 end 1414 db.close 1515 1616 hash.each do |key,value| #ハッシュの各キーとバリューを、htmlを用いて表示する。 1717 print <<EOF 1818 <li>#{key}:#{value}</li><br> 1919 EOF 2020 end
5~14行目に以下のようにpackメソッドを利用しても、上手くいかず、今度はweb上には何も表示されなくなりました。
ruby
15 db.execute('select * from votes;') do |key| #select文で取得した文字列をkeyに格納 26 key2 = key.gsub(/&#x([\da-fA-F]+);/) { [$1].pack('H*').unpack('n*').pack('U') } 37 if hash.has_key?(key2) #ハッシュのキーにkeyの値が使用されていたら、そのバリューの数値を+1する。 48 hash[key2]+=1 59 else #keyの値が使用されていなかったら、バリューの値を1とする。 610 hash[key2]=1 711 end 812 i=i+1 913 end 1014 end 1115 db.close
考えてみたほうが良い手法や、修正すべき点等ありましたら、教えていただけますでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/02 20:32