2016-10-14 10 views
-2

オブジェクトを開くQ_GISに少しPythonコードがあります。私が持っている問題は、ディレクトリにはエンコードできない文字(アンダースコアのような文字)があるということです。エラーは次のとおりです。ASCIIコーデックで文字をエンコードできません ' u2013'

Traceback (most recent call last): File "", line 1, in UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 10: ordinal not in range(128)

私の小さなコードは次のとおりです。

from os import startfile; 
proj = QgsProject.instance(); 
UriFile = str(proj.fileName()); 
img = '[% "pad" %]'; 
Path = str(os.path.dirname(UriFile)); 
startfile(Path+img) 

ので、私の小さなプログラミングのスキルを、私は私が問題を克服するために、この小さなコードにいくつかのコードを追加支援することをお願いします。

答えて

3

私が想定しています。これは通常のダッシュのように見えます(Unicodeの文字:

  • あなたはPython2バージョン
  • QgsProject.instance().fileName()を使用しているがEN-DASHを含むUnicode文字列(–ユニコード文字U + 2013)でありますU + 2D: - )、ASCIIや共通の8ビット文字セットには存在しません。

エラーは正常です:Python2では、ユニコード文字列を普通の8ビット文字列に変換すると、ASCII文字セットが使用されます。

回避策:問題の文字が発生する場所

UriFile = proj.fileName().encode('ascii', 'replace') 

少なくともあなたが表示されます。
あなたはがマッピングされていないもののために文字を置き換える使用することを求めて、明示的なエンコーディングを使用することができます。

ソリューション:それは理にかなっている場合は、完全なUnicode処理を使用して(とのpython3を使用)、またはすべての文字列を処理することを確認する必要がありますいずれか

は、あなたの現在の文字セット(多くの場合、latin1の)代わり

で表現されていますご利用の場合、あなたは成功した1、2または3バイトに任意のUnicode文字を表すことができUTF8エンコーディングを使用するように試みることができる:回答を

UriFile = proj.fileName().encode('utf8') 
0

おかげで、

を210

私は、pythonコードでstrをunicodeに置き換える答えを見つけました。以下のコードを参照してください。

os import startfile; proj = QgsProject.instance(); UriFile = unicode(proj.fileName()); img = '[% "pad"%]';パス=ユニコード(os.path.dirname(UriFile)); startfile(パス+ img)

関連する問題