Python 3 に移行しましょう。 もしどうしても Python 3 に移行できない場合は、 list(xml) をやめて print xml でどうでしょう? 解説: 一般的に言われる「文字化け」は、テキストの実際のエンコーディングと違うエンコーディングで デコードしようとしたときに起こります。(EUC-JPでエンコードされた文字列をcp932でデコードするなど) しかし、今回のケースでは事情が異なります。 まず、 Python 2 のバイト文字列を使っているために list(xml) は1文字(厳密には1codepoint)ごとのリストではなく、1バイトごとのリストになっていて、 utf-8 が1文字のために数バイトを利用しているときにその文字がバラバラになってしまっています。 また、Python 2 が、ASCIIの表示可能文字以外の文字列をクォートしながら表示するときに、 \x9