webbrowser.openでブラウザに渡す日本語が文字化けする場合はurllib.parseを使う【Python勉強中】


このエントリーをはてなブックマークに追加

ここからちょっと広告です。

広告は以上です。

これは主に、『退屈なことはPythonにやらせよう』11章のmapIt.pyでつまづいている人のための記事です。

mapIt.pyというのは、引数に住所を渡すと、Googleマップでその住所を調べてくれるという演習プログラムです。

しかし、本の通りに書いて、例えば「./mapIt.py 東京都千代田区千代田1-1」と実行すると、以下のようにURLが文字化けしてしまいます。

スクリーンショット 2021-01-06 22.18.11

これを解決するには、日本語をエンコードする必要があります。
エンコードには、「urllib.parse」というモジュールを使います。で、ブラウザに住所を渡す直前に、このモジュールで日本語を、URLでよく見る「%E6%9D%B1%E4%BA……」って文字列にエンコードしてあげて、 https://www.google.com/maps/place/ の後ろにくっつけてあげると、うまくいきます。

具体的には、以下のようになります。

住所を渡すとGoogle mapを表示 : GitHub Gist
スクリーンショット 2021-01-06 22.24.33

参考になれば幸いです。

 
 
……みたいに軽く書いてるけど、ここに至るまでにかなりの時間を使いました!
さんざっぱら調べた後で、teratailでようやくピッタシカンカンの回答を見つけて、いつものnote.nkmk.me神にたどり着き、解決できたのです。

そもそもですね、「./mapIt.py」と書くだけでスクリプトが走るようにするのだけで、ひと苦労でした。
何度やってもうまくいかない。シバンもいろいろ書いてみました。「#! /usr/bin/env python3」だけじゃなくて、「#!/usr/bin/env python3」とか「#! /usr/bin/python3」とか。

で、結局、元のスクリプトの1行目が空行で、2行目からシバンを書いていたのが動かない原因だったと知ったときの脱力感といったらなかったですね。いまこうやって書いていても、「本当にあれが原因?」と信じられない思いです。

なお、「./mapIt.py」だと動くのに、「mapIt.py」だと動かないのには、いまだに納得がいっていません。

あと、そもそもmapIt.pyのあるディレクトリまで移動するか、フルパス書いて実行しないと実行できないのも微妙なのですが、気軽にパスを通しちゃっていいのか? という心配もあるので、これはまあちょっと置いときます(こういうのもなのですかね? どういうものが正しいのかが、わからない……)。

でも、教材に書いていないことを、自分でいろいろ調べて解決するのは、何気に楽しいです。
この瞬間だけ、自分が教材を超えたような気がしちゃいます。

同じ教材に取り組んでいるみなさま、頑張りましょー。

Ads by Google

コメント

コメントは、Twitterやはてブに、以下のボタンから本記事のアドレスつきでツイート/ブクマしていただくと、上にあるzenbackのウィジェットに反映されます。
  このエントリーをはてなブックマークに追加
または同ウィジェット内のFacebookコメントでお願いしますー。

Facebookのシェアは……されても誰だかわからないのですが、シェア自体は嬉しいので、下にボタンを置かせていただきます。よろしくお願いします。