pythonとbeautifulsoupであるHPからデーターを取ってきて、エンコードして表示するプログラムを作っているのですが特定の文字だけ文字化けします。原因は何ですか?
そのHPはcharset=utf-8 となっているのですが、
for link in links:
title=link.get("title")
href=link.get("href")
data=title+"\t"+href
print data
data=data.encode("utf8")
print data
f1.write(data)
>>>
水遊び /goods/category.php?category=47
水遊び /goods/category.php?category=47
子供用 /goods/category.php?category=40
蟄蝉セ帷畑 /goods/category.php?category=40
犬用 /goods/category.php?category=41
迥ャ逕ィ
utf8にエンコードした場合このように特定の文字だけ文字化けします。またdataをutf8にした場合保存できるのですが、エンコードしないとUnicodeEncodeError: 'ascii' codec can't encode characters in position 0-13: ordinal not in range(128)とでて保存できません。いったいどういうことでしょう。分かる方よろしくお願いします。
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を設定するとかします。
この回答への補足
回答ありがとうございます。
python2.7.3 実行環境は付属のエディタのIDLEでいいんでしょうか。
>> f1.write(data)
>で書かれたf1(ファイルでしょうか?)
>はUTF-8で文字化けせずに書かれているのではないでしょうか?
ご指摘のとおり保存したファイルは、エンコードしてもしなくてもきちんと書き込まれてます。
勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ワードプレスサイト PHP8.0.25でのWarningエラー 1 2023/06/12 11:44
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
substrでutf8の日本語文字を先...
-
MFCのコントロールにUTF-8の文...
-
CSVファイルの中で、「 , 」カ...
-
住宅にカナを入力する際に丁目...
-
英数字のみ全角から半角に変換
-
エクセルにMicrosoft Barcode C...
-
エクセルで数値を全角文字(カ...
-
VBA 置換文字がみつからない時
-
EXCELからCSVにすると余計なカ...
-
全角入力
-
IEからEdgeへの移行に伴うIMEの...
-
「何とかで始まり、何とかで終...
-
カンマ区切りの数字をCSVフ...
-
VBA EXCEL あるセルの中の一...
-
LaTeXで半角カンマと全角カンマ...
-
VB.net、テキストボックス入力...
-
各項目がダブルクォーテーショ...
-
ACCESS VBA でのバイナリデー...
-
正規表現 特定の文字列を含む行...
-
Excelについて質問です。 セル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl でエラー:Wide character...
-
MFCのコントロールにUTF-8の文...
-
【LaTeX】pBibTeXでのエラーの...
-
【文字コード】外見上は全く同...
-
printfの書式指定での2バイト文...
-
Jcode.pmでconvertできない
-
Perlで、文字の出現回数を調べ...
-
jcode.plのかわり
-
機種依存文字(株)を入力すると\...
-
カタカナ一覧表が知りたい
-
HTML::Templateでutf-8のテンプ...
-
Jcodeによるカタカナ→ひらがな変換
-
デバッグ情報が文字化けする
-
perlについての質問
-
substrでutf8の日本語文字を先...
-
sedやperlでの2バイト文字を含...
-
UTF-8のPerlから、UTF-8、EUC、...
-
perl5.8のエンコードで悩んでます
-
utf-8コードの指定
-
CGIでメール送信で件名文字化け
おすすめ情報