0

ディレクトリ入力からファイルのリストを取得するために glob.glob を使用しています。上記のファイルを開こうとすると、Python が次のエラーで反撃します。

UnicodeEncodeError: 'charmap' コーデックは位置 18 の文字 '\xf8' をエンコードできません: 文字は < undefined > にマップされます

最初に文字列変数を定義することで、次のことができます。

filePath = r"C:\Users\Jørgen\Tables\\"

変数の「r」エンコーディングを取得する方法はありますか?

編集:

import glob

di = r"C:\Users\Jørgen\Tables\\"

def main():
    fileList = getAllFileURLsInDirectory(di)
    print(fileList)

def getAllFileURLsInDirectory(directory):
    return glob.glob(directory + '*.xls*')

さらに多くのコードがありますが、この問題によりプロセスが停止します。

4

2 に答える 2

4

生の文字列リテラルを使用するか、通常の文字列リテラルを使用するかに関係なく、Python インタープリターはソース コードのエンコーディングを認識している必要があります。UTF-8ではなく、8ビットエンコーディングを使用しているようです。したがって、次のような行を追加する必要があります

# -*- coding: cp1252 -*-

ファイルの先頭に (またはソース ファイルに使用される別のエンコーディングを使用して)。#!python3最初の行である必要はありませんが、通常は 1 行目または 2 行目です ( Windows で使用されるスクリプトの場合、最初の行に含める必要があります)。

とにかく、通常はファイル/ディレクトリ名に非 ASCII 文字を使用しない方がよいでしょう。

パスに通常のスラッシュを使用することもできます (Unix ベースのシステムと同じ方法)。また、パスを作成する必要がある場合は、 os.path.joinを参照してください。

更新しました

問題は、おそらくどこで検索するかではありません。私の推測では、エラーは結果のリストを表示したい場合にのみ現れますprint。これは通常、コンソールがデフォルトで文字を表示できない非 Unicode エンコーディングを使用しているためです。ウィンドウchcpで引数なしでコマンドを試してください。cmd

関数内の print コマンドを変更してmain()、文字列表現を常に表示できる ASCII 表現に変換できます。

print(ascii(fileList))
于 2013-07-25T11:59:19.133 に答える
0

以下も参照してください。

Python ファイル名を Unicode に変換し、Pythonを使用してディレクトリ内の中国語のファイル名 を 一覧表示する

文字列を Unicode として明示的に処理するように Python に指示できますが、最初の文字列からそれを維持する必要があります。

この場合、u'somepath' を os.walk に渡します。

于 2014-04-09T23:12:48.693 に答える