« [Python S60 2.0.0] 新しいPython S60を弄ってみた | トップページ | [Python S60 2.0.0] e32.Ao_lock.Signal() の問題 »

2010年11月22日 (月)

[Python S60 2.0.0] ファイルの日本語名の扱い

2010-11-22(月)曇り、のち雨

                   ( 2010-11-23訂正 E:\Resource\Python25を削除)

 昨日に続き、[Python S60 2.0.0]ですが、日本語について若干問題がありました。テキストの日本語ではなくて、ファイルやフォルダ名の日本語名です。V1.4.x の時にも、Pythonでのファイルブラウザで、フォルダの中に日本語名のフォルダやファイルがあると、そのフォルダが空のように見える問題がありました。
 この対策としては、スクリプトの中で sys.setdefaultencoding('utf-8') を実行することで解決されました。この解決策のベースとしては、Python S60 v1.4.xのsite.pyにはsetdefaultencoding()アトリビュートを削除する処理が入っていなかったからです。(注1)

 注1:本来のPython(PC版など)では、Python起動時にsite.pyが、sitecustomize.pyを実行した後でsetdefaultencoding()アトリビュートを削除するようになっているようですが、Python S60 v1.4.xのsite.pyには入っていません。だから、各スクリプトでもsys.setdefaultencoding('utf-8') を実行することが出来たわけです。

 さて、Python S60 2.0.0のsite.pyでは本来のように、sitecustomize.pyを実行した後でsetdefaultencoding()アトリビュートを削除するようになっています。ですから、スクリプト内ではsys.setdefaultencoding('utf-8')が実行できず(実行するとエラーになる)、以前の問題が再び出てきたわけです。

 ということで、色々考えて下記の(1)~(3)の解決策を考えてみました。

 なお、Resourceフォルダの中を弄りますので、 Cメモリ(内部メモリ)にPythonをインストールすると  C:\Resource\Python25フォルダを弄るためにAll Files 化が必要です。  Eメモリ(Micro SD)にインストールした場合はMicro SDをはずして、PCで読み書きすることで実行できます。 ((1)~(3)に共通です。)

(1)sitecustomize.pyを作成して、C/E  C:\resource\Python25 フォルダに入れる。sitecustomize.pyはPython起動時に実行されるので、その中には、sys.setdefaultencoding('utf-8') を実行するよう記述する。

これが一番本来の形かなと思います。sitecustomize.pyの内容は下記のようなものです。

--- sitecustomize.py --------------------------

#-*- coding:utf-8 -*-

import sys
if hasattr(sys, "setdefaultencoding"):
    sys.setdefaultencoding('utf-8')

---------------------------------------------
 

(2) C/E:\resource\Python25\lib.zip  C:\resource\Python25\Python25.zipの中の site.py を書き換えて、中でsys.setdefaultencoding('utf-8') を実行してしまう。変更は下記のようにします。

--- site.py 抜粋--------------------------

def main():
    abs__file__()
    paths_in_sys = removeduppaths()
    paths_in_sys = addsitepackages(paths_in_sys)
    setquit()
    setcopyright()
    sethelper()
    execsitecustomize()
    addbuilddir()
    # Remove sys.setdefaultencoding() so that users cannot change the
    # encoding after initialization.  The test for presence is needed when
    # this module is run as a script, because this code is executed twice.
    if hasattr(sys, "setdefaultencoding"):
        sys.setdefaultencoding('utf-8') #*1 <-- 追加の行
        del sys.setdefaultencoding

---------------------------------------------
 

(3) C/E:\resource\Python25\lib.zip  C:\resource\Python25\Python25.zip の中の site.py を書き換えて、setdefaultencoding()アトリビュートの削除をやめてしまう。

--- site.py 抜粋--------------------------

def main():
    abs__file__()
    paths_in_sys = removeduppaths()
    paths_in_sys = addsitepackages(paths_in_sys)
    setquit()
    setcopyright()
    sethelper()
    execsitecustomize()
    addbuilddir()
    # Remove sys.setdefaultencoding() so that users cannot change the
    # encoding after initialization.  The test for presence is needed when
    # this module is run as a script, because this code is executed twice.
#    if hasattr(sys, "setdefaultencoding"): #* <--コメント化
#        del sys.setdefaultencoding         #* <--コメント化

---------------------------------------------

対策まとめ:
(1)が本来の形ですが、これだけだと今まで作成したPython 1.4.x 用のスクリプトは sys.setdefaultencoding('utf-8')が有るため、Python2.0.0ではエラーになります。そこで、自分としては(1)と(3)を両方やっておくことにしました。これだと、どちらのバージョン用に作成したものでも、フォルダ/ファイル名の日本語化の問題はなくなることになります。

以下は、スクリーンショットなどを、、。

Scym0122a  Scym0126a

 左が対策前でフォルダが空に見えるところ、右が対策後です。
 

Site_change02_2

C:\resource\Python25フォルダの中です。(1)と(3)の対策を入れました。
 

Scym0124a  Scym0125a

 以前V1.4.x用に作成したPyMyViewerが、V2.0.0で動くようになりました。4方向キーを表示するケースと表示しないケースで動かしてみました。

 とりあえず、動くようになってホッとしました。

 

|

« [Python S60 2.0.0] 新しいPython S60を弄ってみた | トップページ | [Python S60 2.0.0] e32.Ao_lock.Signal() の問題 »

Python」カテゴリの記事

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

コメント

I confirm. So happens. We can communicate on this theme.

投稿: tattoo | 2010年12月20日 (月) 12時26分

コメントを書く



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




トラックバック

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

この記事へのトラックバック一覧です: [Python S60 2.0.0] ファイルの日本語名の扱い:

« [Python S60 2.0.0] 新しいPython S60を弄ってみた | トップページ | [Python S60 2.0.0] e32.Ao_lock.Signal() の問題 »