文字コードの変換
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