« PyNotePad ノートデータベース | トップページ | 秋の味覚、、 »

2008年9月10日 (水)

Python 日本語の罠

2008-09-10(水)晴れ

 大層な題ですが、実は勉強不足で苦労した話です。先日書いたノートデータベースPyNoteNdbとPyNotePadを直したときにはまって四苦八苦した事がありました。
それは ユニコードが必要なところで u'abc' はOKだが、u'日本語' は駄目という点です。(環境によります、私がX02NKで使っている環境では駄目でした。)

 先日、ファイルのパス名を E:\Data\ から E:\ブリーフケース\dbdata と日本語名が入った名前に変更しました。この場合、なかで使っているデータベースモジュールe32dbで
 e32db.dbms.open(ファイル名) とファイルオープンするときのファイル名はユニコードで与える必要があります。そこで、u'E:\\ブリーフケース\\dbdata......' と書いたのですが動きませんでした。
 大分前から読んでいる「Python チュートリアル」の途中のところでは 日本語も u'ねこ' と言うような書き方でOKと書いてあったので、何故動かないのか長いこと悩みました。もちろん、u'E:\\Data\\...'と言うのは問題なく動きます(英数字のみの場合はOK)。最終的にunicode('E:\\ブリーフケース\\dbdata........') と書くことで解決しました。明示的にデコードを指示するわけです。

 で、その後「Python チュートリアル」を最後まで読み終わったら、最後のページの最後の数行に書いてありました(涙)。即ち、環境によっては 日本語を u'あ' というように書いた場合は動かないケースもある、と言うわけです。ちゃんと勉強しないといかんなあ、、と実感した瞬間でした。

Sscx0286

 上の画像は
  1行目 「'あ'」、
  2行目 「u'あ'」、
  3行目 「unicode('あ')」
をプリントアウトしてみたものです。左端が文字としてのプリントアウト、右側はコードの値をプリントアウトしたものです。2行目の「u'あ'」が化けています。右のコード値を見ると、UTF-8のコード値(1行目と同じ)に u'' というユニコード表示の皮をかぶせた形になっています。

 勉強になった一件でした。

 

|

« PyNotePad ノートデータベース | トップページ | 秋の味覚、、 »

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

コメント

コメントを書く



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




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/513620/42438360

この記事へのトラックバック一覧です: Python 日本語の罠:

« PyNotePad ノートデータベース | トップページ | 秋の味覚、、 »