タグ

2013年5月29日のブックマーク (5件)

  • YAML.dumpするときは、文字コードを意識しとくべきだった件 - カイワレの大冒険 Second

    なんかハマったので。環境はRuby1.9.3です。 YAML.dumpで出力しようとしたときに、必ずしも人間にわかりやすい形で出力してくれるとは限らないんですな。 とりあえず、ファイルに出力してみる場合。 1 2 3 4 5 6 7 8 >>> content = 'hello, world!!' >>> hash_test = {'key' => Digest::MD5.hexdigest(content)} >>> open('./test.out',"w") do |fh| >>> fh.write hash_test >>> end >>> >>> puts File.open("./test.out").read 9fe4fa1a9c66b49ffef769c595bfd9ec んで、test.outにはこんな感じでデータが入ってる。 1 2 $ cat test.out {"k

  • 欢迎光临-HB

    欢迎光临-HB 欢迎光临-HB。 <<<返回首页

  • Rubyのエンコーディングその2 - tmtms のメモ

    この前「Rubyのエンコーディング」という記事を書いたのですが、それをネタに 8/25 の NSEG で発表しました。 Rubyのエンコーディング from Masahiro Tomita この中で、エンコーディングが原因で予期しないところで落ちてしまうことが結構あるという話もしたんですが、今回はプログラムが落ちないようにするにはどうすればいいかを考えてみます。 エンコーディングが原因で落ちてしまうのは大体次のパターンのようです。 文字列や正規表現のエンコーディングが異なる 文字列中に不正な文字が含まれている 文字列や正規表現のエンコーディングが異なる 正規表現をリテラルで生成していれば、エンコーディングは敢えて指定しない限りは普通はスクリプトエンコーディングになってると思うので、問題は文字列の方です。 特にファイルから読み込んだ文字列のエンコーディングが何になっているかに注意しましょう。

    Rubyのエンコーディングその2 - tmtms のメモ
  • Rubyのエンコーディング - tmtms のメモ

    Ruby 1.9 から文字列や正規表現オブジェクトはそれぞれエンコーディング(いわゆる文字コード)を保持するようになりました。 たとえば 0xB1 0xB2 という2バイトは EUC-JP エンコーディングでは「渦」、SHIFT_JIS エンコーディングでは「アイ」という文字になります。つまり同じバイト列でもエンコーディングが異なれば異なる文字として解釈されます。 1.8 では文字列はただのバイト列でした。なので、それがどのような文字を表しているのか、つまりエンコーディングが何なのかはプログラムが知っている必要がありました。 1.9 では文字列オブジェクト自身が自分が何のエンコーディングかを知っています。同じ 0xB1 0xB2 というバイト列でも、それが EUC-JP の「渦」なのか SHIFT_JIS の「アイ」なのかは、文字列自身が知っています。 スクリプトエンコーディング スクリプ

    Rubyのエンコーディング - tmtms のメモ
  • Ruby1.9.2で日本語を含むYAMLを出力する時、バイナリ文字列化されないようにする

    RubyYAMLRuby(1.8以上)ではYAMLライブラリが標準添付ライブラリです。 そのため、YAMLを扱うには「require 'yaml'」とするだけです。 これでYAML.load(YAML形式から読み込み)、YAML.dump(YAML形式への出力)、 さらに様々なオブジェクトで to_yaml メソッドが使えるようになります。 日語を含むYAMLを出力しかしこのままでは、日語文字列を含んだオブジェクトを YAMLドキュメントとして出力すると、日語部分がバイナリ文字列になってしまいます。 これでは人間にも読みやすいというYAMLの特徴が台なしです。 # -*- coding: utf-8 -*- require 'yaml' puts YAML.dump({'あ' => 'い'}) # 【出力結果】 # --- # "\xE3\x81\x82": "\xE3\x81\x