私はファイルを読み込んでいくつかの文字列を抽出してインデックスを作成するスクリプトで作業しています。ファイルのエンコーディングに関する1つの問題を除いて、すべてうまくいっています。UTF8、Unicodeとバイナリのデータ読み込みの問題
私は再開しようとします:ファイルからのデータの
マイスクリプト読んチャンクを、これらのチャンクを変換小文字や特殊文字を置き換える削除するために正規化する(A、E、A、C、など)unicodedata.normalizeを使用して:
unicodedata.normalize("NFKD",chunk.decode("utf8","ignore")).encode("ascii","ignore").lower()
この場合、文字列 "Olá、como vaivocê?Vamoscaçar?" "Ola、como vai voce?Vamos cacar?"という結果になります。 UTF8でエンコードされたテキストファイルは正常に動作していますが、バイナリファイル(MS .docファイルなど)から文字列を取得しようとすると失敗します。上記と同じコードを使用すると、文字列「Ol、como vai voc?Vamos caar?」が返されます。
私はunicode-escapeを使用してMS .docファイルを処理することができました(ただし、UTF8ファイルでは失敗します)。
20時間以上の研究の後、私はどちらの場合でもスクリプトを実行するソリューションがまだありません。
不幸にも、私は外部モジュールを使用できません。
あなたは 'unicodedata.normalize'を呼び出す前にあなたはあまりにも多くの仕事をしているようです。あなたは他の何よりも先に正規化を行うことができますか?これはうまくいけば、エンコード/デコードが動作するための一貫したデータセットを生成するはずです。 –
"MS .docファイルのようなバイナリファイルの文字列"は常にUTF-8エンコードされていますか?そうでない場合は、別のコード体系でデコードする必要があります。 AFAIK、その周りに方法はありません。したがって、コードは各入力のエンコーディングを知る必要があります(たとえば、ソースとそのソースのエンコーディングを知ることによって)。 –
@AustinHastingsデコードする前に正規化することは意味がありません。バイトシーケンスをユニコードで正規化することはできません。 – lenz