1

Python関数に問題がありますos.path.isdir

私がそれを使おうとしている間、私は得ます:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 36: ordinal not in range(128)

ファイルのヘッダーにコーディング「スタンプ」をすでに配置しました#!/usr/bin/env python # coding: utf-8

また、utf-8記号を取得できる適切な文字列デコードを使用します(QT QLineEditでロードしますが、これは問題ではありません)。

tmp_filepath = u''
tmp_filepath = tmp_filepath.decode('utf-8')
tmp_filepath += QtGui.QFileDialog.getExistingDirectory(self,"Choose directory",self.directorypath,QtGui.QFileDialog.ShowDirsOnly)

使用しようとすると問題が発生します:os.path.isdir(tmp_filepath)

これはPythonのバージョンが悪い(utf-8以外)ことが原因である可能性があることを読みましたが、これに関する他の情報は見つかりませんでした。LinuxUbuntu10.04でpython2.6.5を使用しています。

4

2 に答える 2

3

isdirは、基になるファイルシステムがファイル名としてバイトシーケンスを使用するため、引数をバイトシーケンス(str)に変換したいと考えています。文字列(Unicode)を指定する場合は、なんらかの方法でエンコードする必要があります。

これは、印刷コマンドが使用するのと同じエンコード規則を使用します。print tmp_filepathを試してみてください。おそらく、同じ例外が発生します。

この問題を解決するには、(a)ロケール(環境内のLANG = en_US.utf-8など)を設定するか、(b)tmp_filename.encode('utf-8')をisdirとmkdirに渡します。

(a)をお勧めします。

于 2013-03-27T13:33:17.330 に答える
0

QtはQStringオブジェクトを返します-Pythonユニコードに変換してutf-8にエンコードする必要があります:

 tmp_filepath = unicode(tmp_filepath)
 os.path.isdir(tmp_filepath.encode("utf-8"))

また、今日プログラミングを進める前に、http://www.joelonsoftware.com/articles/Unicode.htmlをよく読んでください。

または、Pythonで他のテキスト変数と相互運用する必要がない場合、QStringオブジェクトは.toUtf8メソッド自体を提供します。

os.path.isdir(tmp_filepath.toUtf8()) 
于 2013-03-27T13:25:05.527 に答える