ruby-reference-manual:549
From: Kouhei Sutou <kou@c...>
Date: Sun, 04 Nov 2007 22:14:13 +0900 (JST)
Subject: [ruby-reference-manual:549] Re: UTF-8な端末でも文字化けせずに出力する
須藤です。 In <C2FA9E85-2F5E-48AB-8066-9554A7141455@l...> "[ruby-reference-manual:547] Re: UTF-8な端末でも文字化けせずに出力する" on Sun, 4 Nov 2007 21:47:52 +0900, Minero Aoki <aamine@l...> wrote: > > 端末のエンコーディングがEUC-JP以外の場合、refeの出 > > 力が文字化 > > けしてしまいます。 > > > > やっつけですが、出力される内容をLANGに指定されているエン > > コー > > ディングに変換するパッチです。 > > 方向性はこれでよいと思うのですが、iconv じゃなくて > NKF に > しませんか。iconv はかなりプラットフォーム依存が激しいので、 > たぶんすごく面倒くさいと思います。 > > NKF にしてもらったらコミットしてしまって構いません。 NKFにしてみました。 Index: lib/bitclust/searcher.rb =================================================================== --- lib/bitclust/searcher.rb (リビジョン 2242) +++ lib/bitclust/searcher.rb (作業コピー) @@ -14,6 +14,7 @@ require 'uri' require 'rbconfig' require 'optparse' +require 'nkf' module BitClust @@ -140,7 +141,9 @@ end def new_database - Database.connect(@dblocation || dblocation()) + db = Database.connect(@dblocation || dblocation()) + @view.database = db if @view + db end def dblocation_name @@ -284,10 +287,12 @@ class TerminalView + attr_accessor :database def initialize(compiler, opts) @compiler = compiler @describe_all = opts[:describe_all] @line = opts[:line] + @database = nil end def show_class(cs) @@ -395,6 +400,47 @@ puts end + def puts(*args) + super(*args.collect {|arg| convert(arg)}) + end + + def convert(string) + return string if @database.nil? + _output_encoding = output_encoding + return string if _output_encoding.nil? + input_nkf_option = encoding_to_nkf_option(@database.encoding) + output_nkf_option = encoding_to_nkf_option(_output_encoding) + if input_nkf_option and output_nkf_option + NKF.nkf("-#{input_nkf_option.upcase}#{output_nkf_option}", string) + else + string + end + end + + def output_encoding + locale = ENV["LC_ALL"] || ENV["LC_MESSAGE"] || ENV["LANG"] + case locale + when /\.([a-z\d\-]+)\z/i + $1 + else + nil + end + end + + def encoding_to_nkf_option(encoding) + return nil if encoding.nil? + case encoding + when /\A(?:euc[-_]?jp|ujis)\z/i + "e" + when /\Autf[-_]?8\z/i + "w" + when /\As(?:hift[-_]?)?jis\z/i + "s" + when /\Aiso-2022-jp\z/i + "j" + else + nil + end + end end - end -- ML: ruby-reference-manual@m... 使い方: http://QuickML.com/
534 2007-10-28 16:36 [kou@c... ] UTF-8な端末でも文字化けせずに出力する 547 2007-11-04 13:47 ┗[aamine@l... ] -> 549 2007-11-04 14:14 ┗[kou@c... ]