私はあまりにも長い間エンコーディングに苦労してきましたが、今日はメンタル ブロックを大きく開放したいと考えています。
現在、リクエストを使用して多数の Web サイトをスクレイピングしています。HTTP ヘッダーを使用して、ページが使用しているエンコーディングを把握し、サイトのヘッダーが欠落している場合はchardetにフォールバックしていると言えます。そこから、ダウンロードしたバイトコードをデコードし、r.text
.
すべて良い。
しかし、私が混乱しているのは、そこからテキストに対していくつかの作業を行い、それを stdout に出力して、印刷時にエンコーディングを提供することです。
print foo.encode('utf-8')
問題は、私がそうすると、印刷されたものが台無しになることです。以下では、'判断' と '標準' という単語の間にダッシュを入れることを期待しています:
Declaratory judgmentsStandard of review.
代わりに、4 つの小さな数字が入った箱型のものを取得します。もちろん、ここには表示されないようですが、数字は 0097 であると思います。これは、表示した場合に得られるものに対応しています。
repr(foo)
u'Declaratory judgments\x97Standard of review.'
それは理にかなっていますが、私のemdashはどこですか?
プロセスは次のように要約されます。
- リクエストはページをダウンロードし、テキストを Unicode オブジェクトにインテリジェントにデコードします
- 私はそれで働きます
- utf-8 にエンコードして出力します。
問題はどこですか?これは神話上の Unicode サンドイッチのように聞こえますが、明らかに何かが欠けています。