[#47173] 小数点以下を切り捨てる方法について — "T.Soejima" <clev@...2.so-net.ne.jp>

お世話になっております。そえじま@勉強中です。

16 messages 2010/06/23

[ruby-list:47159] Re: Ruby 1.9.x の m17n のエラーの回避方法 (Re: )

From: masayoshi takahashi <maki@...>
Date: 2010-06-15 11:21:07 UTC
List: ruby-list #47159
高橋征義です。こんばんは。

2010年6月15日14:49 Takeshi NISHIMATSU <t_nissie@yahoo.co.jp>:
> Ruby 1.9.xで環境変数LANG=Cのままこのulmulを使うと、
>  % ulmul2html5 README-ja
>  /home/t-nissie/x86_64-Linux/lib/ruby/gems/1.9.1/gems/ulmul-0.4.1/lib/ulmul.rb:381:in `===': invalid
> byte sequence in US-ASCII (ArgumentError)
>   :
> とエラーになってしまいます。とりあえず
>  $ LANG=ja_JP.UTF-8 ulmul2html5 README-ja
>  % env LANG=ja_JP.UTF-8 ulmul2html5 README-ja     # For csh and tcsh users
> で回避できます。
>
> ulmul2htm5はutf-8で書かれたテキストを読み込んで、utf-8の
> テキストを標準出力に書き出すプログラムです。Ruby 1.9.xで
> も、Ruby 1.8.xでも、gemでインストールした場合でも、setup.rb
> でインストールした場合でも、ちゃんと動いてくれるような
> 本質的で正しい回避方法はありますでしょうか。

とりあえず1.9に関しては、スクリプトの冒頭辺りに、

Encoding.default_external = "UTF-8"

を付け加えれば、LANGに関係なくUTF-8で読み書きされるようになると
思います。
1.8でも動くように、ということだと、

if defined?(Encoding) && Encoding.respond_to?("default_external")
  Encoding.default_external = "UTF-8"
end

みたいな感じでしょうか。

> gemでインストールした場合、# -*- encoding: UTF-8 -*- を
> lib/ulmul.rb と bin/ulmul2html5 とに書き加えるだけでは
> ダメなようです。(なにか勘違いをしているかもしれませんが。)

マジックコメントで指定されるのはスクリプトのエンコーディングです。
一方、ここで問題になっているのは、外部から与えられる文字列の
エンコーディングの方ではないかと思います。後者の値は
Encoding.default_externalの値で、これはRubyのコマンドラインでの
-KオプションとかRUBYOPTの値とかlocaleの値とかを参考に暗黙に設定
されるものですが、自分で設定するのも上記のような形でできます。

この辺りは成瀬さんの『Ruby M17N の設計と実装』を読むと
理解が深まると思います。
http://jp.rubyist.net/magazine/?0025-Ruby19_m17n

ご参考になれば。

高橋征義 (maki@rubycolor.org)

In This Thread