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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

4597閲覧

APIから受け取った情報が文字化けする

RinKawakami

総合スコア20

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/01/27 09:58

前提・実現したいこと

http://geoapi.heartrails.com/api.html」内の「郵便番号による住所検索 API」を利用したいです。

発生している問題・エラーメッセージ

UTF-8でエンコードしているはずなのですが、うまく表示されません・・・

エラーメッセージ

該当のソースコード

Python3

1import urllib.request as req 2import urllib.parse as par 3import sys 4 5#郵便番号から、緯度と経度を取得 6 #コマンドラインから郵便番号を受け取る 7if len(sys.argv) <= 1: 8 print("使い方:sunrise.py (郵便番号7ケタ)") 9 sys.exit() 10 11add_num = sys.argv[1] 12 13 #APIに送信するURLを作成する 14get_xy_API = "http://geoapi.heartrails.com/api/xml" 15query = { 16 "method":"searchByPostal", 17 "postal":add_num 18} 19params = par.urlencode(query) 20get_xy_url = get_xy_API + "?" + params 21 22 #APIから情報を受け取る 23with req.urlopen(get_xy_url) as r: 24 b = r.read() 25 data = b.decode("UTF-8") 26 print(data)

###コマンドラインに表示される値

MacBook-Air-4:Products Rin$ python3 sunrise.py 3050005 <?xml version="1.0" encoding="UTF-8"?> <response> <location> <city>&#12388;&#12367;&#12400;&#24066;</city> <city-kana>&#12388;&#12367;&#12400;&#12375;</city-kana> <town>&#22825;&#20037;&#20445;&#19968;&#19969;&#30446;</town> <town-kana>&#12354;&#12414;&#12367;&#12412;1&#12385;&#12423;&#12358;&#12417;</town-kana> <x type="decimal">140.110227</x> <y type="decimal">36.093365</y> <prefecture>&#33576;&#22478;&#30476;</prefecture> <postal>3050005</postal> </location> <location> <city>&#12388;&#12367;&#12400;&#24066;</city> <city-kana>&#12388;&#12367;&#12400;&#12375;</city-kana> <town>&#22825;&#20037;&#20445;&#20108;&#19969;&#30446;</town> <town-kana>&#12354;&#12414;&#12367;&#12412;2&#12385;&#12423;&#12358;&#12417;</town-kana> <x type="decimal">140.105252</x> <y type="decimal">36.096179</y> <prefecture>&#33576;&#22478;&#30476;</prefecture> <postal>3050005</postal> </location> <location> <city>&#12388;&#12367;&#12400;&#24066;</city> <city-kana>&#12388;&#12367;&#12400;&#12375;</city-kana> <town>&#22825;&#20037;&#20445;&#19977;&#19969;&#30446;</town> <town-kana>&#12354;&#12414;&#12367;&#12412;3&#12385;&#12423;&#12358;&#12417;</town-kana> <x type="decimal">140.105854</x> <y type="decimal">36.103768</y> <prefecture>&#33576;&#22478;&#30476;</prefecture> <postal>3050005</postal> </location> <location> <city>&#12388;&#12367;&#12400;&#24066;</city> <city-kana>&#12388;&#12367;&#12400;&#12375;</city-kana> <town>&#22825;&#20037;&#20445;&#22235;&#19969;&#30446;</town> <town-kana>&#12354;&#12414;&#12367;&#12412;4&#12385;&#12423;&#12358;&#12417;</town-kana> <x type="decimal">140.111431</x> <y type="decimal">36.103151</y> <prefecture>&#33576;&#22478;&#30476;</prefecture> <postal>3050005</postal> </location> </response>

補足情報(FW/ツールのバージョンなど)

どうすれば良いのでしょうか・・・

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

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

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

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

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

guest

回答1

0

ベストアンサー

日本語部分が数値文字参照で表現されているので、以下のようにhtml.unescapeでデコードすればよいです。

Python

1import html 2# 略 3 data = b.decode("UTF-8") 4 data = html.unescape(data)

投稿2019/01/27 10:37

can110

総合スコア38266

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

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

RinKawakami

2019/01/27 12:16

ありがとうございます! 解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問