-4

このサイトには、Python での Unicode 処理エラーについて、文字通り数十、おそらく数百もの質問があります。これが私が話していることの例です:

UnicodeDecodeError: 'ascii' コーデックは位置 2310 のバイト 0xe2 をデコードできません: 序数が範囲外です (128)

非常に多くの質問は、OP が問題のあるコンテンツを削除したいだけであることを示しています。彼らが受け取る応答は一様に、コーデック、文字セット、およびこの 1 つの基本的な質問に対応していないあらゆる種類の事柄に関する巨大なジャンボでいっぱいです。

「Unicode を含むテキスト ファイルを処理しようとしています。これが何であるかは気にすることはできません。解決しようとしている問題のコンテキストではノイズにすぎません。」

だから、無数の JSON でエンコードされたツイートを含むファイルがあります。これらの特殊文字にはまったく興味がありません。行から削除してください。

fh = open('file-full-of-unicode.txt')
for line in fh:
   print zap_unicode(line)

「line」という変数が与えられた場合、含まれている可能性のあるユニコードを除いて単純に出力するにはどうすればよいですか?

そこで、誤解されないようにいくつかの異なる方法で質問を繰り返しました-ユニコードは、私がやろうとしていることの文脈ではジャンクです。それを無害なものに変換するか、単に完全に削除したい. これはどのように最も簡単に達成できますか?

4

3 に答える 3

12

できますline.decode('ascii', 'ignore')。これは、エラーを無視して、可能な限りすべてを ASCII としてデコードします。

ただし、これを行う場合は、痛みを覚悟してください。Unicode には理由があります。何を捨てているのかわからないままデータの一部を捨てると、ほとんどの場合、後で問題が発生します。それは、「車のエンジン内のギズモが動かなくても構わない。ただ運転したいだけだ。動かないものは何でも取り出せ!」と言っているようなものです。爆発するまでは大丈夫です。

于 2013-05-18T04:20:14.013 に答える
8

unicode問題を「解決」することはできません。s を適切に処理できないコードを修正する必要があります。これを行う簡単な方法はありませんが、最も簡単な方法は、入力のバイトをデコードして、アプリケーションがどこでもテキストを使用していることを確認することです。

于 2013-05-18T04:15:04.323 に答える
0

@BrenBarnが示唆したように、結果は偽の英単語になります...

私の提案は、ユニコード文字を含む単語全体を削除することを検討しない理由です。つまり、単語にユニコード文字が含まれているspace+characters+space場合charactersは、前のスペースの後と次のスペースの前にあるすべての文字を削除します。結果は、ユニコード文字だけを削除するよりもはるかに優れています..

名前 (@username) とタグ (#tags) だけを削除したい場合は[@,#,..]、すべての Unicode 文字を力ずくで検索する代わりに、フィルター ( )を使用できます。

評判が悪いのでコメントできないので、回答にしました.. :-(

于 2013-05-18T06:29:58.887 に答える