人気ブログランキング | 話題のタグを見る

utf-8 が使えるコマンドプロンプト utf8com.rb

sqlite3 は多バイトコードは utf-8 しか使えないが、Windows のコマンドプロンプトでは sjis しか使うことができない。chcp で表示文字コードの変更はできるが、入力はできなくなる。そこで、utf-8 で入力も表示もできるコマンドプロンプト utf8com.rb を作ってみた。

ruby utf8com.rb を起動すると、コマンドプロンプトで、
utf8> sqlite3 ubin.db "select * from zipcode where cho = '中町' ”

のような検索ができる。(日本語入力との時は普通のコマンドプロンプトのように Alt + [半/全] キーを押す。)

ファイル名: utf8com.rb (eval は半角英数に変換)

require 'kconv'
require 'readline'
include Readline

loop do
  line = readline('utf8> ', true).toutf8
  break if line == 'exit'
  output = eval('`' + line + '`').tosjis
  puts output
end

残念ながら、このプログラムは問題点が多く実用にはならない。ちょっと動かしただけでも下のような問題が見つかった。

1.cd コマンドが使えない
2.ディレクトリを階層的に表示するとエラーになる。
3.’玉川’の変換ができない。"select * from zipcode where cho = '玉川'" がエラーになってしまう。

上の問題は、入力した文字列を utf-8 に変換して eval で実行する部分で起きている。sjis を utf-8 に変換しても、ascii 部分のコードは変わらないから動くだろうという発想だが、そうは問屋が卸さないらしい。

ちょっと業腹だが、入力文字の変換をあきらめた次のコードなら、utf-8 の文書も表示だけはきっちりやってくれる。

require 'kconv'
require 'readline'
include Readline

loop do
  line = readline('utf8> ', true)
  break if line == 'exit'
  output = eval('`' + line + '`').tosjis
  puts output
end
by tnomura9 | 2008-10-11 22:58 | Ruby | Comments(0)
<< loop do と while... 郵便番号データベース >>