質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2708閲覧

UnicodeEncodeError:webbrowser.openでgooglemapの日本語住所を表示できない

cpp335

総合スコア8

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/06/02 09:27

英語の住所だとちゃんと実行されるようです。
どのようにコードすればよいでしょうか。

Python

#! /usr/bin/env python3 #coding:utf-8 #コマンドラインやクリップボードに指定した住所の地図を開く import webbrowser, sys, pyperclip if len(sys.argv)> 1: #コマンドラインから住所を取得する。 address=''.join(sys.argv[1:]) else: #クリップボードから住所を取得する。 address=pyperclip.paste() webbrowser.open('https://www.google.co.jp/maps/place/'+address))
File "mapIt.py", line 12, in <module> webbrowser.open('https://www.google.co.jp/maps/place/'+address) File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/webbrowser.py", line 61, in open if browser.open(url, new, autoraise): File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/webbrowser.py", line 636, in open osapipe.write(script) UnicodeEncodeError: 'ascii' codec can't encode character u'\u3012' in position 51: ordinal not in range(128)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/06/02 09:30

python3のシェバンが書いてあるのにpython2.7で実行されているっぽいですが、どちらで実行することを意図していますか?
LouiS0616

2018/06/02 09:31

pythonはどのように起動していますか?もしCUIで呼び出しているなら、python --version の結果を見てみてください。
hayataka2049

2018/06/02 09:31

あと、そのコードをコピペしてみたらinvalid syntaxが・・・
cpp335

2018/06/02 09:34

python 2.7です。シェバン消しても同様のエラーがでました。コードはすみません。最終行のaddress横の)を削除お願いいたします。
hayataka2049

2018/06/02 09:43

確認ですが、ファイルの文字コードはutf-8ですよね? 実は手元で再現しなくて・・・あとはターミナルの文字コードもutf-8かどうか確認してみてください
cpp335

2018/06/02 09:50

すみません。ファイルとターミナルの文字コードはどのように確認すればよいでしょうか。
hayataka2049

2018/06/02 09:55

使っているエディタとターミナルエミュレータ等で変わってきます。「自分が使っているものの名前 文字コード 確認」とかでググると何かしら出てくると思います
cpp335

2018/06/02 10:00

ファイルはutf-8でした。ターミナルエミュレータは標準のものを使用しています。もう少しググってみます
guest

回答1

0

ベストアンサー

手元環境で再現していないので確証はありませんが、とりあえずこんなのを見つけたので、明示的にutf-8で渡すようにすると解決するかもしれません。

Python webbrowser platform specific unicode error on osx - Stack Overflow

python

1#coding:utf-8 2#コマンドラインやクリップボードに指定した住所の地図を開く 3import webbrowser, sys, pyperclip 4if len(sys.argv)> 1: 5 #コマンドラインから住所を取得する。 6 address=''.join(sys.argv[1:]).decode("utf-8") # とりあえず面倒くさいからdecode。これはstrのはず 7else: 8 #クリップボードから住所を取得する。 9 address=pyperclip.paste().decode("utf-8") # 同上。strかどうかよくわからないけどとりあえずやってみる 10 11webbrowser.open((u'https://www.google.co.jp/maps/place/'+address).encode("utf-8")) # stackoverflowの人はutf-8のstrで渡せって言ってる・・・

それでこれはどこまで動くかわからないので、コマンドラインとクリップボード両方試してみてください。

追記

とりあえず、どこかから読み込むことは一回忘れて、そのまま書いて動くかを先に確認するべきでした・・・

python

1#coding:utf-8 2import webbrowser, sys, pyperclip 3 4webbrowser.open((u'https://www.google.co.jp/maps/place/ここを適当な日本語住所と置き換えてください').encode("utf-8"))

追記2

urlエンコードで化けてるので、送る前にurlエンコードしてasciiだけにしちゃいましょう。

python

1#coding:utf-8 2import webbrowser, sys 3import urllib 4 5url = 'https://www.google.co.jp/maps/place/' + urllib.quote_plus('静岡市駿河区谷田52-1') 6webbrowser.open(url)

これは通って欲しい・・・。

投稿2018/06/02 09:59

編集2018/06/02 10:47
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cpp335

2018/06/02 10:08

探していただきありがとうございます。 下記のようなエラーがでました。 Traceback (most recent call last): File "mapIt.py", line 9, in <module> address=pyperclip.paste().decode() # 同上。strかどうかよくわからないけどとりあえずやってみる UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-14: ordinal not in range(128)
cpp335

2018/06/02 10:11

decode部分を消すと 文字化けしたものがgoogle mapに入力されます。
hayataka2049

2018/06/02 10:13

追記の方法でやれるかまず確認してみてください あと、コマンドライン引数で渡すとどうなりますか?
cpp335

2018/06/02 10:15

そのまま書いたものでも文字化けしたものが入力されました。
cpp335

2018/06/02 10:18

コマンドラインだとcan't decodeになりました。 Traceback (most recent call last): File "mapIt.py", line 6, in <module> address=''.join(sys.argv[1:]) .decode() # とりあえず面倒くさいからdecode。これはstrのはず UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)
hayataka2049

2018/06/02 10:18

うーむ、とりあえず入力例と文字化けしたurlをください
hayataka2049

2018/06/02 10:19

ごめんなさい、これはdecodeの引数に"utf-8"が必要でした・・・
hayataka2049

2018/06/02 10:47

今追記した方法でいけませんか
cpp335

2018/06/02 10:49

できました!ありがとうございます!
hayataka2049

2018/06/02 10:53 編集

そしたら最初に質問者様が書いたコードに戻って、 if len(sys.argv)> 1: #コマンドラインから住所を取得する。 address=''.join(sys.argv[1:]) else: #クリップボードから住所を取得する。 address=pyperclip.paste() の部分までをできた追記のurlの行の上にコピペして、urllib.quote_plus()の引数をaddressにしてみてください
cpp335

2018/06/02 10:53

ええとpyperclipを併用するにはどうすればいいんでしょうか。
cpp335

2018/06/02 10:54

あ、ありがとうございます。やってみます。
cpp335

2018/06/02 10:56

下記のエラーがでました。 Traceback (most recent call last): File "mapIt.py", line 11, in <module> url = 'https://www.google.co.jp/maps/place/' + urllib.quote_plus(address) File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 1305, in quote_plus return quote(s, safe) File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 1298, in quote return ''.join(map(quoter, s)) KeyError: u'\u9759'
cpp335

2018/06/02 10:57

コマンドラインへの入力はうまくいきました。
hayataka2049

2018/06/02 10:58

pyperclip.paste() を pyperclip.paste().encode("utf-8") にしてみてください
cpp335

2018/06/02 10:58

コードはこちらです #coding:utf-8 import webbrowser, sys, pyperclip import urllib if len(sys.argv)> 1: #コマンドラインから住所を取得する。 address=''.join(sys.argv[1:]) else: #クリップボードから住所を取得する。 address=pyperclip.paste() url = 'https://www.google.co.jp/maps/place/' + urllib.quote_plus(address) webbrowser.open(url)
cpp335

2018/06/02 10:59

できました!ありがとうございます!
hayataka2049

2018/06/02 11:02

参考に申し上げておきますが、python3に乗り換えると、こういう苦労減りますよ
cpp335

2018/06/02 11:07

python3インストールしたはずなのですが、ターミナルでpython--versionうつと2.7が出てしまい、時間がなかったのでそのまま学習を進めてしまっていました。こちらも質問したいと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問