hakeの日記

Windows環境でプログラミングの勉強をしています。

文字コードの変換

Rubyの勉強

Ruby/Qteスクリプト文字コードUTF8であることが多いのですが、ファイルの読み書きを行う場合にそのファイルの文字コードがUTF8以外で書かれていることもあります。その場合は文字コードの変換を行う必要があります。文字コードの変換は標準の機能で可能なのかもしれませんが、よく判らないのでrbuconvというライブラリを使用します。

rbuconvはよしだむの秘密のページで公開されています。またザウルス用にパッケージ化されたものがsoft_keiさんのサイトのzRSSReaderのページで公開されています。今回はこれを使用させていただきました。

追記

Ruby1.8.2以降では自前のライブラリで変換が可能になりました



下のスクリプトでは読み込みボタンを押すと/home/zaurus/euc.txtというeucJPで書かれたファイルの内容をテキストボックス@ebox1に表示する、また追加保存ボタンを押すと@ebox1に書かれている文字をeuc.txtに追加保存する、という動作をします。ファイルの読み書き時のeucJPとUTF8の間の変換は、Uconv::euctou8とUconv::u8toeucを使用している。

#!/usr/bin/env ruby

require "qte"
require "qpe"

require "uconv"

include Qte
include Qpe


class SampleWindow < QMainWindow
   def initialize()
      super()
      setCaption(tr("サンプル"))
      @msg = QLabel.new(tr("eucJPのファイルの読み書き"),self)
      @msg.setGeometry(10,10,300,30)

      @ebox1 = QMultiLineEdit.new(self)
      @ebox1.setGeometry(0,200,635,200)

      @pb1 = QPushButton.new(tr("読み込み"),self)
      @pb1.setGeometry(320,5,100,30)
      connect(@pb1,QSIGNAL("clicked()"), self, 'readFile')

      @pb2 = QPushButton.new(tr("追加保存"),self)
      @pb2.setGeometry(420,5,100,30)
      connect(@pb2,QSIGNAL("clicked()"), self, 'appendFile')
   end

   def readFile     #ファイル読み出し
      file = File.open( "/home/zaurus/euc.txt" )
      file.each{ |line|
         @ebox1.insertLine( tr( Uconv.euctou8( line.chomp! )))
      }
      file.close
   end

   def appendFile   #ファイル追加保存
      file = File.open( "/home/zaurus/euc.txt", "a" )
      file.puts( Uconv.u8toeuc( @ebox1.text.local8Bit.to_str ))
      file.close
   end
end

$defaultCodec = QTextCodec.codecForName("utf8")
app = QPEApplication.new([$0]+ARGV)
app.setDefaultCodec($defaultCodec)
QApplication.setFont(QFont.new("lcfont",18))
app.showMainWidget(SampleWindow.new)
app.exec