0

私はファイルにこのテキストを持っています - Recuérdame (フランス語の単語であることに注意してください)。このファイルを Python スクリプトで読み取ると、このテキストはRecuérdame.

ユニコード文字列として読みました。テキストのエンコーディングを見つけてデコードする必要がありますか? または、私の端末が私にいたずらをしているのですか?

4

4 に答える 4

5

はい、(ファイルを構成するバイトから)Unicode文字列に変換するには、テキストファイルのエンコーディングを知っている必要があります。

たとえば、エンコーディングがUTF-8であることがわかっている場合:

with open('foo.txt', 'rb') as f:
    contents = f.read().decode('utf-8-sig')   # -sig takes care of BOM if present

ただし、ファイル内のテキストはUnicodeでエンコードされていないようです。アクセント付きの文字は明らかにXMLエンティティとして保存されており、手動で変換する必要があります(リンクのjleedevへの帽子の先端)。

于 2010-12-16T06:38:23.323 に答える
1

Unicode文字列ではありません。これは、エンコードされているエンコードの文字列です。したがって、UTF-8またはLatin-1またはその他の文字列です。この場合、&#xE9は、具体的にはéを表すHTML/XMLエンティティです。これは、非ASCIIデータをエンコードするためにHTMLおよびXMLで使用されるエンコードです。

これをUnicodeにデコードするには、Fredrik Lundhsメソッドを見てください:http://effbot.org/zone/re-sub.htm#unescape-html

于 2010-12-16T06:46:35.093 に答える
0

これはHTMLであり、この構成は「エンティティ」と呼ばれます。使用できます

def entity_decode(match):
    _, is_hex, entity = match.groups()
    base = 16 if is_hex else 10
    return unichr(int(entity, base))

print re.sub("(?i)(&#(x?)([^;]+);)", 
       entity_decode,
       "Recurdame")

すべてのエティティをデコードします。

編集:はい、もちろんlatin1ではありません。すべてのエンティティで機能するはずです。

于 2010-12-16T06:46:07.647 に答える
0

xlrdを使用して、行に... xl_data.find(str(cell_value))...エラーが発生します:"'ascii'コーデックは位置3の文字u'\ xdf'をエンコードできません:序数ではありません範囲内(128)」。フォーラムでのすべての提案は、私のドイツ語では役に立たなかった。ただし、次のように変更すると、... xl_data.find(cell.value)...エラーは発生しません。したがって、xldrを使用する特定のコマンドで引数として文字列を使用すると、特定のエンコードの問題が発生すると思います。

于 2012-12-23T15:32:08.513 に答える