<html><head></head><body>三浦です。windowsでは、過去の互換性のapiとpure unicodeのapiがあり、pythonでは、後者を実装すべきですが、そうなっていないようです。<br>
<br>
また、提案の変更は、日本語の設定になっているwindowsに限られる変更で、その他の環境での動作を破壊すると思われるので、取り入れがたいと思います。<br>
<br>
また、windowsは、sjisではなく、CP932です。<br>
<br>
したがって、<br>
言語判定とos判定して、windowsの場合だけ適切に世界中の言語ごとの処理を行うルーチンを作るか、windowsのunicode apiを使うべきです。<br>
三浦<br><br><div class="gmail_quote">ASAHI Kosuke <asahi@hcc.co.jp> wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre class="k9mail">赤木さん<br /><br />度々、詳細な解説をしていただき有難うございます。<br />提示していただいた書き換えで実行できることを確認しました。<br /><br />少し整理して(出来なかったらそのまま。。)、不具合報告しておこうと思います。<br /><br />(2013/11/19 19:43), Minoru Akagi wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;"> 朝日さん<br /><br /> execfileに与えるファイルパスの文字コードについて調べてみました。<br /> まずデスクトップに次の内容の無題-0.pyというファイルを作成しました。<br /> print "Hello world!"<br /><br /> 次にコマンドラインインタプリタとQGISのPythonコンソールでのテスト結果です。<br /><br /> コマンドラインインタプリタでのテスト結果:<br /><br /><blockquote class="gmail_quote"
style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> s = "C:/Users/username/Desktop/<a href="http://無題-0.py">無題-0.py</a>"<br /> s<br /></blockquote></blockquote></blockquote> 'C:/Users/username/Desktop/\x96\xb3\x91\<a href="http://xe8-0.py">xe8-0.py</a>'<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> print s<br /></blockquote></blockquote></blockquote> C:/Users/username/Desktop/<a
href="http://無題-0.py">無題-0.py</a><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> execfile(s)<br /></blockquote></blockquote></blockquote> Hello world!<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> u = u"C:/Users/username/Desktop/<a href="http://無題-0.py">無題-0.py</a>"<br /> u<br /></blockquote></blockquote></blockquote>
u'C:/Users/username/Desktop/\u7121\<a href="http://u984c-0.py">u984c-0.py</a>'<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> print u<br /></blockquote></blockquote></blockquote> C:/Users/username/Desktop/<a href="http://無題-0.py">無題-0.py</a><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> execfile(u)<br /></blockquote></blockquote></blockquote> Traceback (most
recent call last):<br />    File "<stdin>", line 1, in <module><br /> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordin<br /> al not in range(128)<br /><br /><br /> Pythonコンソールでのテスト結果:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> s = "C:/Users/username/Desktop/<a href="http://無題-0.py">無題-0.py</a>"<br /> s<br /></blockquote></blockquote></blockquote> 'C:/Users/username/Desktop/\xe7\x84\xa1\xe9\xa1\<a href="http://x8c-0.py">x8c-0.py</a>'<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote"
style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> print s<br /></blockquote></blockquote></blockquote> C:/Users/username/Desktop/<a href="http://ç„¡é¡Œ-0.py">ç„¡é¡Œ-0.py</a><br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> execfile(s)<br /></blockquote></blockquote></blockquote> Traceback (most recent call last):<br />    File "<input>", line 1, in <module><br /> IOError: [Errno 2] No such file or directory:<br /> 'C:/Users/username/Desktop/\xe7\x84\xa1\xe9\xa1\<a
href="http://x8c-0.py">x8c-0.py</a>'<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> u = u"C:/Users/username/Desktop/<a href="http://無題-0.py">無題-0.py</a>"<br /> u<br /></blockquote></blockquote></blockquote> u'C:/Users/username/Desktop/\u7121\<a href="http://u984c-0.py">u984c-0.py</a>'<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> print u<br
/></blockquote></blockquote></blockquote> C:/Users/username/Desktop/<a href="http://無題-0.py">無題-0.py</a><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> u.encode("utf-8")<br /></blockquote></blockquote></blockquote> 'C:/Users/username/Desktop/\xe7\x84\xa1\xe9\xa1\<a href="http://x8c-0.py">x8c-0.py</a>'<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;">
execfile(u)<br /></blockquote></blockquote></blockquote> Traceback (most recent call last):<br />    File "<input>", line 1, in <module><br /> UnicodeEncodeError: 'ascii' codec can't encode characters in position<br /> 24-25: ordinal not in range(128)<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"> execfile(u.encode("sjis"))<br /></blockquote></blockquote></blockquote> Hello world!<br /><br /><br /> 以上の結果をもとに朝日さんがご指摘の行を次のように書き換えてやれば私の環境では実行できるようになりましたが,この修正方法が最良かどうかはわかりません。<br /> -
self.parent.pc.shell.runCommand(u"execfile(r'{0}')".format(filename))<br /> + self.parent.pc.shell.runCommand(u"execfile(u'{0}'.encode('sjis'))".format(filename.replace("\\",<br /> "/")))<br /><br /> ご参考になれば幸いです。<br /><br /> 赤木 実<br /><br /><br /> 2013年11月19日 18:00 ASAHI Kosuke <asahi@hcc.co.jp>:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"> みなさん<br /><br /> 朝日です。<br /><br /> チケット上げる際に解決方法わかれば提示したいと思い、ご相談です。<br /> たぶん、こんなところ使っている人はまずいないですし、日本語ファイル名使え<br /> なくても問題は無いのですが…<br /><br /> QGIS 2.0の<br />   メニューから「プラグイン」→「pythonコンソール」→横のアイコンから「エ<br /> ディタの表示」<br /> を選択します。<br />
出てきたエディタでpythonスクリプトを書いて、「スクリプトの実行」を選ぶ<br /> と、pythonスクリプトを実行できます。<br /> windowsの環境にて、スクリプトをファイル名に日本語を含めて保存すると、実<br /> 行の際にエラーなってしまいます。日本語含まなければOKです。<br /><br /> OSGeo4Wでインストールしたとすると、<br />   C:\OSGeo4W64\apps\qgis\python\console\console_<a href="http://editor.py">editor.py</a><br />   <a href="https://github.com/qgis/QGIS/blob/master/python/console/console_editor.py">https://github.com/qgis/QGIS/blob/master/python/console/console_editor.py</a><br /> の584行目、<br />   self.parent.pc.shell.runCommand(u"execfile(r'{0}')".format(filename))<br /> 辺りをいじれば直るのかと思ったのですが、うまく直せませんでした。<br /><br />
もし、この辺いじれば直りそうとのアドバイスありましたら、歓迎致します。<br /> よろしくお願いします。<br /><br /> --<br /> 北海道地図株式会社 研究開発課<br /> 朝日 孝輔<br /> mailto:asahi@hcc.co.jp<br /> Tel : 0166-62-4711<br /><br /><hr /><br /> OSGeoJapan-discuss mailing list<br /> OSGeoJapan-discuss@lists.osgeo.org<br /> <a href="http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss">http://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss</a><br /></blockquote></blockquote><br /></pre></blockquote></div><br>
-- <br>
Sent from my Android phone with K-9 Mail. Please excuse my brevity.</body></html>