urllib2.urlopen
を使ってWebページを読み込んで、さまざまな魔法を実行し、print
を使って結果を吐き出すPythonスクリプトを持っています。私たちは、そのようにのようにWindows上でプログラムを実行します。Peter PiperはPythonプログラムをパイプして、すべてのユニコード文字を失った
python program.py > output.htm
ここで問題です:
urlopen
はUTF8を出力IIS Webサーバーからデータを読み出します。これは同じデータを出力に吐き出しますが、特定の文字(Wordが常にあなたよりもスマートなのであなたの意志にあなたのために挿入する長いハイフンなど)は、文字化けして–
のようになります。
さらに調査したところ、WebサーバーがUTF8データを吐き出したとしても、output.htm
ファイルはISO-8859-1文字セットでエンコードされていました。
私の質問:
- は、Windows上の出力ファイルにPythonプログラムをリダイレクトするとき、それは常に、この文字セットを使用していますか?
- もしそうなら、その動作を変更する方法はありますか?
- そうでない場合は、回避策がありますか?私はちょうどコマンドラインのパラメータとして
output.htm
を渡すことができ、画面の代わりにそのファイルに書き込むことができると思うが、私のプログラムでは一揃いのロジックをやり直す必要があるだろう。
ありがとうございました!
UPDATE:output.htm
の上部に
私が追加:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
をしかし、それは違いはありません。文字はまだ文字化けしています。 Firefoxで手動でUTF-8に切り替えると、ファイルが正しく表示されます。 IEとFFの両方とも、明らかにそうではないが、このファイルは西洋のISOだと思う。
パイプではありません。それはリダイレクトです。エンコーディングをしているのは 'print'です。パイプやリダイレクトはWindowsのPythonの外で処理されます。 –
あなたが言うように "文字化け"に終わった場合、出力*は* UTF-8です。ファイルを表示しているものはISO-8859-1と解釈しています。つまり、結果のHTMLファイルには、エンコーディングを示すXMLプロローグ、またはContent-Typeを指定するメタタグがありますか? – slyfox
これはあまり変わりがありません。 –