日本語

日本語には,色々コーデックがある.
だから,よくわからなくなるんだが・・・・.
扱いそうなモノは・・・
-SHIFT-JIS
-EUC-JP
-UTF-8
などなど.
んで,Pythonで日本語を使えるようにするためにライブラリをインストールする.
以下のサイトからダウンロードできる.パッケージになっているので簡単にインストールできる.
現在の環境は,MacOSX10.4.5だが,Python2.3用Mac OS X 10.3.x用インストーラでインストールできた.
[[JapaneseCodecs>http://www.python.jp/Zope/download/JapaneseCodecs]]

試す

UTF-8,EUC-JP,SHIFT-JISの3種類のテキストファイルを開いて,ターミナルに出力,あるいは
検索をかけてみるテスト.

#! /usr/local/bin/python
# coding=utf-8
import sys
import re
def main(argv):
#shift-jisで開く
f = open('shiftjis.txt','r')
jstr = unicode(f.readline(),'shift_jis')
f.close
utf_str = jstr.encode('utf-8')
print utf_str
#試しに検索してみる
if re.search("これは", utf_str):
print "発見!"
print ""
f = open('euc.txt','r')
jstr = unicode(f.readline(),'euc_jp')
f.close
print jstr.encode('utf-8')
f = open('utf.txt','r')
jstr = f.readline()
f.close
print jstr
# main
main(sys.argv)

動いたけど・・・.よくわからん.
色々な情報源を調べて,site.pyを編集したりしてみたが,全然うまくいかなかった.
これでうまくいってるからいいかぁ・・・.
しかし,エンコードが間違っている時のことを考えて,何らかの対処をせねばなるまい.

例外処理で解決!?

ここで,覚え立ての例外処理を加えてやってみる.

#! /usr/local/bin/python
# coding=utf-8
import sys
import re
def readline_with_unicode(f):
encode_symbols = ['shift_jis', 'euc_jp', 'utf-8']
for i in range(len(encode_symbols)):
try:
jstr = unicode(f.readline(),encode_symbols[i])
print jstr.encode('utf-8')
return 0
except:
print "readline is failed, with",encode_symbols[i]
def main(argv):
if len(argv)>1:
f = open(argv[1],'r')
readline_with_unicode(f)
# main
main(sys.argv)

だせぇ・・・・.
なんか,例外処理をもうちょっとうまくできんのか・・・.思案中・・・・.