ありがとうございました。
検討した結果、sitecustomize.pyで設定する方法は、Python 3.1では読んでいる
ようですが、期待のようには動きませんでした。動作に影響がない。
Python 3.1では次のようしました。
-----^
import sys, plistlib, codecs, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
pathOrFile = sys.argv[1]
pl = plistlib.readPlist(pathOrFile)
print(pl)
-----$
Python 2.6.2では、sitecustomize.pyによる設定は有効でした。次のようなファ
イルを\Lib\site-packagesに置きます。
-----^
import sys
sys.setdefaultencoding('utf-8')
-----$
取り敢えず、ご報告まで。
On Wed, 19 Aug 2009 14:50:38 +0900
MATSUI Fe2+ Tetsushi <VED03370@...> さんwrote:
> Fe2+ です。
>
> At Wed, 19 Aug 2009 10:55:23 +0900,
> 藤岡和夫 wrote:
> > Safariのブックマークを解析できるようにしたいなと思って、調べると、Apple
> > のデータはplistというフォーマットに統一されているようです。
> >
> > 標準ライブラリにplistを読み書きするライブラリがあったので、次のようなス
> > クリプトを書いたのですが、例によって、Unicodeのところで躓いています。
> >
> > -----^
> > import sys, plistlib
> > pathOrFile = sys.argv[1]
> > pl = plistlib.readPlist(pathOrFile)
> > print(pl)
> > -----$
> >
> > Windows XP上でのActivePython3.1の実行結果:
> >
> > C:\Documents and Settings\%username%\Application Data\Apple Computer\Safari>python
> > plist.py Bookmarks.plist
> > Traceback (most recent call last):
> > File "plist.py", line 4, in <module>
> > print(pl)
> > UnicodeEncodeError: 'cp932' codec can't encode character '\xe9' in position 3576
> > 6: illegal multibyte sequence
> >
> > 対処法は如何に?
>
> 問題はデフォルトエンコーディングの cp932 と .plist の utf-8 (多分) が
> 合っていないことから起こっているのだと思います。
>
> 1. デフォルトエンコーディングを変える。
> cp932 を指定している sitecustomize.py か何かを書き変える
> 2. 自分で変換する。
> codecs.EncodedFile で変換したファイルを readPlist に渡す
>
> どちらかじゃないでしょうか。
> --
> MATSUI "Fe2+" Tetsushi
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html