&tag(Ruby1.9); *目次 [#t3e9702d] #contents *参考情報 [#l3eeaa44] -[[Ruby]] -[[./UnitTest]] -[[Ruby/CSV]] -[[Windows7/Ruby]]…Windows7でRubyを使う。 *文字コードまわり [#jde6e12d] 大幅に変更されているのではまりやすい。 **参考情報 [#nde6747b] -[[Ruby 1.9.1のm17nについてメモ - daily gimite:http://d.hatena.ne.jp/Gimite/20080101/1199199332]] **スクリプトの文字コードを指定する [#be4eb570] -スクリプトの文字コードがファイル中の文字列リテラルのencodingとなる。 -ファイルの先頭で文字コードを指定できる # -*- encoding: UTF-8 -*- p "あ".encoding => #<Encoding:UTF-8> -何も書かないとUS-ASCIIなのでエラーになる p "あ".encoding => invalid multibyte char (US-ASCII) **文字コードを変換する [#z862ba0f] -encode("文字コード")で変換できる。非破壊メソッド。 p "あ".encode("EUC-JP") **文字コードの解釈を変更する [#qbf628f8] -force_encoding("文字コード")でバイト列は変更せず解釈を変更する。例えばUTF-8のファイルをencodingを指定せず読み込んだ後に、force_encoding("UTF-8")してから後の処理を行うなど。破壊メソッド。 p str.force_encoding("UTF-8") #=> "あ" **日本語の文字列かどうかを判定する [#b8223e17] -1byteだけの文字列じゃない場合日本語であるとみなすならば次のような方法で判定できる。 #pre{{ def jstring?(str) str.bytesize > str.size end }} *Macでインストール [#v6a7213e] **make testでこける。 [#wbd307b1] -[[ruby-trunk - Bug #5122: make test fails on OS X 10.7 (11A511) - Ruby Issue Tracking System:http://redmine.ruby-lang.org/issues/5122]]が参考になる? *Tips [#m1a9d348] **Windowsで文字化けを防ぐ [#hfe6b810] -例えばUTF-8でスクリプトを書いてそのままprintすると文字化けする。 ***解決方法1. STDOUT, STDERRでset_encodingする [#oeafb051] -set_encodingして出力時エンコードを変更(internal_encodingも変更しないとだめかも)。 #pre{{ STDOUT.set_encoding( Encoding.locale_charmap ) STDERR.set_encoding( Encoding.locale_charmap ) }} -引数一つの場合、外部エンコーディングの指定。Windowsで上記指定を行うと外部エンコーディングがWindows-31Jになる。 ***解決方法2. default_external, default_internalを指定する [#e3ffcbb9] -スクリプトの先頭に以下の指定を行う。外部エンコーディング名:内部エンコーディング名。 #! ruby -E Windows-31J:utf-8 -プログラム中でdefault_external, default_internalを設定しても文字化けする場合、上記の変更か、コマンドラインオプションで-Eを指定したほうがいいみたい。と思ってたけど、emacsやxyzzyのshell-modeだと文字化けする。STDOUT.set_encodingを指定しないとだめ? * CSVを扱う [#v58d113d] -[[Ruby/CSV]]を参照。