【perlメモ】Data::Dumperでダンプした時日本語が文字化けしないようにするには

XMLをパース結果を表示したりするのにDate::Dumperを利用して表示するのが一般的ですが、下の様に日本語は文字化けします。文字化けという表現はあまり正しくないかもしれませんが、とにかく普通に読めない状態で表示されるわけです。まあ、そういうものなのだろうと思って今まで華麗にスルーしてきたのですが、一応解決方法があるのだろうかと思って先日調べてみました。

$VAR1 = {
          ‘xmlns’ => ‘urn:yahoo:jp:srchmi’,
          ‘firstResultPosition’ => ‘1’,
          ‘Result’ => [
                      {
                        ‘Height’ => ‘302’,
                        ‘FileFormat’ => ‘jpeg’,
                        ‘Width’ => ‘267’,
                        ‘Summary’ => "\x{753b}\x{50cf}\x{4e00}\x{89a7} \x{6b21}\x{3078}",
                        ‘RefererUrl’ => ‘http://www.tsutaya.co.jp/works/30023197/pic.html?dispImageNo=002’,
                        ‘Title’ => "\x{30d0}\x{30a4}\x{30aa}\x{30cf}\x{30b6}\x{30fc}\x{30c9}\x{3000}\x{30a2}\x{30f3}\x{30d6}\x{30ec}\x{30e9} \x{30af}\x{30ed}\x{30cb}\x{30af}\x{30eb}\x{30ba}",
                        ‘Thumbnail’ => {
                                       ‘Height’ => ‘130’,
                                       ‘Width’ => ‘114’,
                                       ‘Url’ => ‘http://thm-a01.yimg.com/nimage/813c6f7e9a756276’
                                     },
                        ‘ClickUrl’ => ‘http://www.tsutaya.co.jp/images/bamen/00056/4976219026642_B002L.jpg’,
                        ‘Url’ => ‘http://www.tsutaya.co.jp/images/bamen/00056/4976219026642_B002L.jpg’,
                        ‘FileSize’ => ‘28.2kB’
                      },

 

検索してみるとすぐ見つかりました。でも、オプションやutf8フラグてきなものじゃなくて携帯の絵文字をコンバートするときのようなバッドノウハウ的な方法なのでもっとスマートな方法はないのだろうかと思ってさらに調べていると

◇【Perl】Data::Dumper 日本語出力方法は? utf8でスクリプト書いてます。 Dumper出力の日本語が”¥x{1234}”となってしまいます。 日本語表示する方法ありますでしょうか.. – 人力検索はてな

◇Data::Dumper;でダンプ後表示した文字列\x{30fc}….. – Perl – 教えて!goo

下のサイト様の記事を発見。

◇Data::DumperでUTF-8フラグつき文字列をエスケープさせないようにするには « ku

Data::Dumper::qquote()メソッドを無効にする方法があったのでその方法を利用させていただくことにしました。

結果は下のとおりでちゃんと読める形で表示されるようになりました。

$VAR1 = {
          ‘xmlns’ => ‘urn:yahoo:jp:srchmi’,
          ‘firstResultPosition’ => 1,
          ‘Result’ => [
                        {
                          ‘Height’ => 302,
                          ‘FileFormat’ => ‘jpeg’,
                          ‘Width’ => 267,
                          ‘Summary’ => 画像一覧 次へ,
                          ‘RefererUrl’ => ‘http://www.tsutaya.co.jp/works/30023197/pic.html?dispImageNo=002’,
                          ‘Title’ => バイオハザード アンブレラ クロニクルズ,
                          ‘Thumbnail’ => {
                                           ‘Height’ => 130,
                                           ‘Width’ => 114,
                                           ‘Url’ => ‘http://thm-a01.yimg.com/nimage/813c6f7e9a756276’
                                         },
                          ‘ClickUrl’ => ‘http://www.tsutaya.co.jp/images/bamen/00056/4976219026642_B002L.jpg’,
                          ‘Url’ => ‘http://www.tsutaya.co.jp/images/bamen/00056/4976219026642_B002L.jpg’,
                          ‘FileSize’ => ‘28.2kB’
                        },

 

でもって、YAML::Dumpを使うといいらしいとあるので使ってみたのが下。


Result:
  – ClickUrl: http://www.tsutaya.co.jp/images/bamen/00056/4976219026642_B002L.jpg
    FileFormat: jpeg
    FileSize: 28.2kB
    Height: 302
    RefererUrl: http://www.tsutaya.co.jp/works/30023197/pic.html?dispImageNo=002
    Summary: 画像一覧 次へ
    Thumbnail:
      Height: 130
      Url: http://thm-a01.yimg.com/nimage/813c6f7e9a756276
      Width: 114
    Title: バイオハザード アンブレラ クロニクルズ
    Url: http://www.tsutaya.co.jp/images/bamen/00056/4976219026642_B002L.jpg
    Width: 267

確かに日本語は文字化けしないしシンプルで見やすいけど、Data::Dumperの方がデータの構造が把握しやすいのでやっぱりData::Dumperを使いたいと思います。

(Visited 73 times, 1 visits today)

タグ :