作者: 藤岡和夫
日時: 2009/8/19(18:18)
ありがとうございました。

検討した結果、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