• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:pythonの文字コードとファイル操作)

Pythonの文字コードとファイル操作

このQ&Aのポイント
  • pythonとbeautifulsoupでHPからデータを取得し、特定の文字だけ文字化けする問題について
  • HPのcharsetがutf-8であるにもかかわらず、utf8にエンコードすると特定の文字が文字化けする
  • エンコードしないとUnicodeEncodeErrorが発生し、データを保存することができない

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

まず、Pythonのバージョン、実行環境を明記してください。 前の質問から、Python2系と仮定します。 Python2系では、内部がバイト列の文字列stringと、内部がUnicodeで表現されたUnicode文字列unicodeがあります。 通常、Unicode文字列を出力するときは、その出力装置に合せたencodeを行います。 stringはそのままのバイト列が出力されます。 beautifulsoupについて不案内なので、ちょっと調べたところ、Unicode文字列で扱う、とありました。 encode前の >子供用 は Unicode→print→(自動で画面用のコードにencode)→画面に表示 となり、画面のコードと一致しているはずです。 > 蟄蝉セ帷畑 UTF-8の「子供用」のバイト列を、Shift_JISとして解釈した変換するとこうなりました。 つまり Unicode→encodeでUTF-8に→そのままのバイト列でprint→画面でShift_JISとして表示(文字化け) となっているように感じられます。 使用している端末かなんかが、Shift_JISで表示するようになっていませんか? > 水遊び が正しく表示されるのは、その端末は、コード自動判定できるようになっている、とかありませんか? > f1.write(data) で書かれたf1(ファイルでしょうか?) はUTF-8で文字化けせずに書かれているのではないでしょうか? > UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-13: ordinal not in range(128) これは、f1.writeに対して、codecがasciiになっているため、asciiの範囲外の文字(日本語とか)のencodeができない、というエラーです。 encodeであらかじめstringに変換する(現行のプログラム)とか、codecを設定するとかします。

rusifelu
質問者

お礼

遅くなりました。ありがとうございました。

rusifelu
質問者

補足

回答ありがとうございます。 python2.7.3 実行環境は付属のエディタのIDLEでいいんでしょうか。 >> f1.write(data) >で書かれたf1(ファイルでしょうか?) >はUTF-8で文字化けせずに書かれているのではないでしょうか? ご指摘のとおり保存したファイルは、エンコードしてもしなくてもきちんと書き込まれてます。 勉強になりました。

関連するQ&A