« 暑くてネタのまとめができん、、 | トップページ | Python ローマ字-かな漢字変換(PyR2KKJ) 000_3 差し替えました。 »

2009年6月24日 (水)

Python 原則を守っておけば良かったんだけど、、

2009-06-24(水)雨、曇り

 まあ、単なるうっかりミスの類なんですが、、、(Pythonの)教科書に書いてあった原則を守っておけば良かったなあ、、という話です。Pythonを使っている方には当たり前の事かと思うのですが、自分のメモとして、、。

 文字列(文字ストリング)の操作を行うところは、unicodeにして操作する処理にしておくこと、という件です。
 文字列も if chr_buf == check_ptn :  等のように文字列を入れた変数を丸ごと使う場合は良いのですが、 chr_buf[n]  等のように一部を取りだして使う場合、unicode にしておかないと(日本語が混じった場合)エラーになる訳です。

 教科書に書いてあったのに、PyR2KKJ ではローマ字文(ASCIIコード部分)しか通らないからと手を抜いておいたら、機能追加を繰り返していたら動かなくなってしまいました。必死で調べたら、前記の「ローマ字処理」の部分が日本語も対象になるようになってエラーになっていました。原則通りに作っておけば、後で悩むことも無かったのですが、、、バグを作り込む典型的なパターンですね。
 或いは処理前にASCIIコードのみかどうかチェックしておいても良かったかもしれません。

 ついでなので、問題の動きを示すテストを、、、。

Sscx0528a   Sscx0529a

"あいう" の文字列wk1(UTF-8)、wk2(unicode) から[1]番目を取りだしてプリントするとUTF-8ではプリントできない(①)けど、unicodeだと、きちんと[1]番目の"い"がプリントされます(②)。UTF-8では[1]番目の文字ではなく、[1]番目のバイトデータが取り出されているわけです。(③は、[1]番目のバイトデータをプリントして見たところです。文字が割り当てられている数字ではないですね。)

 動くようになったから良いけど、今後の教訓になりました。

 

|

« 暑くてネタのまとめができん、、 | トップページ | Python ローマ字-かな漢字変換(PyR2KKJ) 000_3 差し替えました。 »

Python」カテゴリの記事

アプリケーション」カテゴリの記事

携帯電話」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 暑くてネタのまとめができん、、 | トップページ | Python ローマ字-かな漢字変換(PyR2KKJ) 000_3 差し替えました。 »