5

Mac OS X 10.8.2 を使用しています

非 ASCII 文字を含むファイル名のファイルを検索しようとすると、それらが存在することは確かですが、結果が得られません。コンソール入力を例にとります

> find */Bärlauch*

結果が出ません。しかし、ウムラウトなしで試してみると、

> find */B*rlauch*
images/Bärlauch1.JPG

したがって、ファイルは間違いなく存在します。「ä」を「ae」に置き換えてファイルの名前を変更すると、ファイルが見つかります。

同様に、Python モジュールglobはファイルを見つけることができません。

>>> glob.glob('*/B*rlauch*')
['images/Bärlauch1.JPG']
>>> glob.glob('*/Bärlauch*')
[]

エンコーディングと関係があるに違いないことがわかりましたが、私の端末は utf-8 に設定されており、ユニコード文字列を使用する Python 3.3.0 を使用しています。

4

2 に答える 2

8

Mac OS X は、HFS+ のファイル名に常に非正規化文字を使用します。unicodedata.normalize('NFD', pattern)グロブ パターンを非正規化するために使用します。

import unicodedata

glob.glob(unicodedata.normalize('NFD', '*/Bärlauch*'))
于 2013-01-06T18:44:02.500 に答える
1

Pythonプログラムは、基本的にテキストファイルです。従来、人々はASCII文字セットの文字のみを使用してそれらを記述しているため、それらを書き込むエンコーディングについて考える必要はありません。すべての文字セットは、ASCII文字のデコード方法について合意しています。

非ASCII文字を使用してPythonプログラムを作成しました。したがって、プログラムには暗黙のエンコーディング(言及していません)が付属しています。このようなファイルを保存するには、ディスク上でウムラウトをどのように表現するかを決定する必要があります。おそらくあなたの編集者があなたのためにUnicode以外のものを選んだと思います。

とにかく、このような問題を回避するには2つの方法があります。プログラムのソースコードでASCII文字のみを使用するように制限するか、特定のエンコーディングでテキストファイルを読み取るようにPythonに宣言することができます。

\x0228前者を行うには、a-umlautをUnicodeエスケープシーケンスに置き換える必要があります(これは、現時点ではテストできないと思います)。後者を行うには、ファイルの先頭にコーディング宣言を追加する必要があります。

# -*- coding: <your encoding> -*-
于 2013-01-06T18:21:59.800 に答える