LoginSignup
4
4

More than 5 years have passed since last update.

rubyのp, putsとUnicode

Posted at

初めての投稿です.
今までやってきたことがなんとなく自分の中で無駄になっている気がしたので,とりあえずまとめておいて自分でも見れるようにしたいと思い,記事として残しておくことにしました.(同じことで詰まる人が少しでも減ればという思いもちょっと含めて)

最近rubyを始め,RSSを取得して表示するということをやろうとした際に詰まったところです.

RubyのRSS取得,parseをする際に,便利なライブラリのFeedjira(旧名:Feedzirra)(またこれに関しても記事に後日まとめます.)があることを知り,早速行うことにしました.

基本的な使い方としては,
feed = Feedjira::Feed.fetch_and_parse(<URL>)
とするだけでrssの取得ができます.(簡単!)

しかし,そのチェックのため,文字列を書き出してみたところ,
"\u3010 29\u65E5\uFF08\u571F\uFF09 \u6D25\u8EFD\uFF08\u9752\u68EE\uFF09 \u3011 \u66C7\u308A - 17\u2103/10\u2103 - Yahoo!\u5929\u6C17\u30FB\u707D\u5BB3"
とUnicodeの文字列が・・・
pythonでやったときはこんなことなかったのに・・・

最初はparseの問題かと思い,色々調べましたが,どれもうまくいかず・・・
途方に暮れていたところ,友人からUnicodeの変換について書いてある記事を教えてもらい,それを参考に実装.
以下の様に書いたところ,うまく出力されました.
rb
puts str.gsub(/\\u([\da-fA-F]{4})/){
[$1].pack('H*').unpack('n*').pack('U*')
}

これは分からんでしょwww
と思っていたが,翌日,これを使って別のRSSから取得するコードを書いたところ,またUnicode文字が・・・
前のコードと見比べてみても特におかしいところがないので,混乱状態・・・

しかし,全く関係ない(というかもはや同じだと思っていた)pとputsが違うことに気づき,putsに変えてみるとちゃんと出力.
rubyを知らな過ぎたこともあり,初歩的な部分でのミスでした・・・

ちなみに,ここから出力系のメソッドについて調べ,以下のサイトにまとめてあったので載せておきます.
シリコンバレー 24時: Rubyの表示メソッド
要は,pだとそのまま表示されちゃうっぽいですね・・・

これからも色々挙げていこうと思うので,よろしくお願いします.

4
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4