7

文章を含むファイルがあります。その一部はスペイン語で、アクセント付きの文字(例:é)または特殊文字(例:¿)が含まれています。文章がスペイン語か英語かを判断できるように、文章内のこれらの文字を検索できる必要があります。

私はこれを達成するために最善を尽くしましたが、それを正しく行うことができませんでした。以下は私が試した解決策の1つですが、明らかに間違った答えを出しました。

sentence = ¿Qué tipo es el? #in str format, received from standard open file method
sentence = sentence.decode('latin-1')
print 'é'.decode('latin-1') in sentence
>>> False

代わりにcodecs.open(..、..、'latin-1')を使用してファイルを読み取ろうとしましたが、それは役に立ちませんでした。次に、u'é'.encode('latin-1')を試しましたが、うまくいきませんでした。

私はここでアイデアがありません、何か提案はありますか?

@icktoofayが解決策を提供しました。最終的にファイルのデコードを維持しましたが(latin-1を使用)、文字(u'é')にPythonユニコードを使用しました。これには、スクリプトの先頭にPythonユニコードエンコーディングを設定する必要がありました。最後のステップは、unicodedata.normalizeメソッドを使用して両方の文字列を正規化し、それに応じて比較することでした。迅速で素晴らしいサポートをありがとうございました。

4

2 に答える 2

5

unicodedata.normalizeチェックする前に文字列で使用してください。

説明

Unicodeは、いくつかの文字を作成するための複数の形式を提供します。たとえば、1文字、、または2文字áで表すことができます: 、次に'その上にaを置きます'。文字列を正規化すると、文字列がいずれかの表現に強制されます。(どの表現に正規化するかは、パラメーターとして渡すものによって異なります)áa´form

于 2012-11-10T20:24:57.150 に答える
0

お使いの端末は UTF-8 を使用していると思われるため、'é'.decode('latin-1')正しくありません。代わりに Unicode 定数を使用してu'é'ください。

スクリプトで Unicode を正しく処理するには、スクリプトとデータ ファイルのエンコーディングを宣言し、受信データをデコードし、送信データをエンコードします。スクリプト内のテキストに Unicode 文字列を使用する。

例 (スクリプトを UTF-8 で保存):

# coding: utf8
import codecs
with codecs.open('input.txt',encoding='latin-1') as f:
    sentence = f.readline()
if u'é' in sentence:
    print u'Found é'

print出力を端末エンコーディングで暗黙的にエンコードすることに注意してください。

于 2012-11-11T19:37:49.570 に答える