1

収集される一連の文字列があり、一部はアクセント付きです (例: é)。基本的な ASCII のさまざまな文字 (URL 用) を使用して、それぞれのバージョンを作成したいと考えています。同様の問題の他の例をたくさん見つけました。次のように機能させることができます。

from unidecode import unidecode
unidecode(u"Café")

ただし、csv/googledoc/similar から取得した一連の文字列にこれを適用することに興味があります。

この場合、私が想定する行動方針は、次のようなものでユニコードであることを宣言することです。

from_google_doc = "Café"
a = unicode(fromgoogledoc,'utf-8')

ただし、これは utf8 が位置 3 のバイト 0x82 をデコードできないというエラーを返します。

私はこれを試しました:

a = unicode("Café",'iso-8859-1')

これは機能しますが、unidecode に渡されると、é.

これが初歩的なものである場合はお詫びします。私の研究/いじりはどこにも行きませんでした...私はPythonにかなり慣れておらず、エンコーディングにもかなり慣れていません!

4

2 に答える 2

1

解析している入力ファイルを生成するために使用されたコーデックを把握する必要があります。

すべての8 ビット データ (ファイルとネットワーク ストリームを含む) は、何らかの形式のエンコーディングを使用して、人間の言語を、使用されるコンピューター形式の制限に押し込む必要があります。データもエンコードされていますが、UTF-8 や ISO-8859-1 (latin 1) ではありません。

UTF-8 デコード エラー メッセージは、位置 3 に 16 進バイト 82 があることを示しているため、例が実際に次のようになっていると仮定します。

from_google_doc = "Caf\x82"

コード ページ 437はたまたまé16 進数 82 の位置にあるため、上記は Unicode にきれいにデコードされ、期待どおりの結果が得られます。

>>> from_google_doc = 'Caf\x82'
>>> print from_google_doc.decode('cp437')
Café
>>> from unidecode import unidecode
>>> unidecode(from_google_doc.decode('cp437'))
'Cafe'

ただし、ソース ドキュメントと関連するメタデータの詳細がなければ、それが正しいコーデックであるかどうかを判断することはできません。1 つには、投稿の情報が少なすぎて、どのコーデックが正しいかを判断できません。コード ページ 850 は、コードポイント 82 を使用しé.

コーデックは、どのコーデックが使用されたかを検出する方法について、最初にソース データを取得した方法に依存するため、ケースバイケースで決定する必要があります。

以下をお読みください。

続行する前に、コーデックの意味と、それが Unicode とどのように異なるかを十分に理解してください。

于 2013-07-15T18:10:35.067 に答える
-1

# -*- coding: ...ヘッダーを使用してソース ファイルのエンコーディングを定義します( http://www.python.org/dev/peps/pep-0263/ )

次に、実際にそのエンコーディングを (エディターで) 使用します。Python 2 では、次を使用します。

from __future__ import unicode_literals

その後、

from_google_doc = "Café"

実際にはすでにUnicodeタイプです。

于 2013-07-15T17:53:18.270 に答える