[OSGeoJapan-discuss] QGIS・pythonコンソール・エディタでの日本語ファイル名

Minoru Akagi akaginch @ gmail.com
2013年 11月 19日 (火) 02:43:23 PST


朝日さん

execfileに与えるファイルパスの文字コードについて調べてみました。
まずデスクトップに次の内容の無題-0.pyというファイルを作成しました。
print "Hello world!"

次にコマンドラインインタプリタとQGISのPythonコンソールでのテスト結果です。

コマンドラインインタプリタでのテスト結果:

>>> s = "C:/Users/username/Desktop/無題-0.py"
>>> s
'C:/Users/username/Desktop/\x96\xb3\x91\xe8-0.py'
>>> print s
C:/Users/username/Desktop/無題-0.py
>>> execfile(s)
Hello world!

>>> u = u"C:/Users/username/Desktop/無題-0.py"
>>> u
u'C:/Users/username/Desktop/\u7121\u984c-0.py'
>>> print u
C:/Users/username/Desktop/無題-0.py
>>> execfile(u)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordin
al not in range(128)


Pythonコンソールでのテスト結果:
>>> s = "C:/Users/username/Desktop/無題-0.py"
>>> s
'C:/Users/username/Desktop/\xe7\x84\xa1\xe9\xa1\x8c-0.py'
>>> print s
C:/Users/username/Desktop/無題-0.py

>>> execfile(s)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IOError: [Errno 2] No such file or directory:
'C:/Users/username/Desktop/\xe7\x84\xa1\xe9\xa1\x8c-0.py'

>>> u = u"C:/Users/username/Desktop/無題-0.py"
>>> u
u'C:/Users/username/Desktop/\u7121\u984c-0.py'
>>> print u
C:/Users/username/Desktop/無題-0.py
>>> u.encode("utf-8")
'C:/Users/username/Desktop/\xe7\x84\xa1\xe9\xa1\x8c-0.py'

>>> execfile(u)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position
24-25: ordinal not in range(128)

>>> execfile(u.encode("sjis"))
Hello world!


以上の結果をもとに朝日さんがご指摘の行を次のように書き換えてやれば私の環境では実行できるようになりましたが,この修正方法が最良かどうかはわかりません。
- self.parent.pc.shell.runCommand(u"execfile(r'{0}')".format(filename))
+ self.parent.pc.shell.runCommand(u"execfile(u'{0}'.encode('sjis'))".format(filename.replace("\\",
"/")))

ご参考になれば幸いです。

赤木 実


2013年11月19日 18:00 ASAHI Kosuke <asahi @ hcc.co.jp>:
> みなさん
>
> 朝日です。
>
> チケット上げる際に解決方法わかれば提示したいと思い、ご相談です。
> たぶん、こんなところ使っている人はまずいないですし、日本語ファイル名使え
> なくても問題は無いのですが…
>
> QGIS 2.0の
>  メニューから「プラグイン」→「pythonコンソール」→横のアイコンから「エ
> ディタの表示」
> を選択します。
> 出てきたエディタでpythonスクリプトを書いて、「スクリプトの実行」を選ぶ
> と、pythonスクリプトを実行できます。
> windowsの環境にて、スクリプトをファイル名に日本語を含めて保存すると、実
> 行の際にエラーなってしまいます。日本語含まなければOKです。
>
> OSGeo4Wでインストールしたとすると、
>  C:\OSGeo4W64\apps\qgis\python\console\console_editor.py
>  https://github.com/qgis/QGIS/blob/master/python/console/console_editor.py
> の584行目、
>  self.parent.pc.shell.runCommand(u"execfile(r'{0}')".format(filename))
> 辺りをいじれば直るのかと思ったのですが、うまく直せませんでした。
>
> もし、この辺いじれば直りそうとのアドバイスありましたら、歓迎致します。
> よろしくお願いします。
>
> --
> 北海道地図株式会社 研究開発課
> 朝日 孝輔
> mailto:asahi @ hcc.co.jp
> Tel : 0166-62-4711
>
> _______________________________________________
> OSGeoJapan-discuss mailing list
> OSGeoJapan-discuss @ lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss


More information about the OSGeoJapan-discuss mailing list