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

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

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

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

Q&A

解決済

1回答

804閲覧

エラーの解決:'UCS-2' codec can't encode characters in position 1-1: Non-BMP character not supported in Tk

A_miyaki

総合スコア8

Python 3.x

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

0グッド

0クリップ

投稿2018/06/26 01:37

編集2018/06/26 03:05

###概要
環境はPython 3.6.5です。

エラーメッセージは以下の通りです。

Traceback (most recent call last): File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\analyze_image\get_image.py", line 41, in <module> pprint(photos) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 53, in pprint printer.pprint(object) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 139, in pprint self._format(object, self._stream, 0, 0, {}, 0) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 167, in _format p(self, object, stream, indent, allowance, context, level + 1) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 189, in _pprint_dict context, level) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 346, in _format_dict_items context, level) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 167, in _format p(self, object, stream, indent, allowance, context, level + 1) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 210, in _pprint_list context, level) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 389, in _format_items context, level) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 167, in _format p(self, object, stream, indent, allowance, context, level + 1) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 189, in _pprint_dict context, level) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 346, in _format_dict_items context, level) File "C:\Users\mamet\AppData\Local\Programs\Python\Python36-32\lib\pprint.py", line 176, in _format stream.write(rep) UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 1-1: Non-BMP character not supported in Tk >>> コード

###ソースコードを以下に記載。

from flickrapi import FlickrAPI from urllib.request import urlretrieve from pprint import pprint import os, time # API キーの情報 key = "####取得したキーを入力" secret = "#####取得したsecretを入力" # 重要:リクエストを送るタイミングが短すぎると画像取得先のサーバを逼迫してしまうか、 # スパムとみなされてしまう可能性があるので、待ち時間を 1 秒間設ける。 wait_time = 1 # コマンドライン引数の 1 番目の値を取得 vehiclename = input('検索項目>>')#本来はsys.argv[1]でコマンドラインから引数を取得 # 画像を保存するディレクトリを指定 savedir = "./" + vehiclename # FlickrAPI にアクセス # FlickrAPI(キー、シークレット、データフォーマット{json で受け取る}) flickr = FlickrAPI(key, secret, format='parsed-json') result = flickr.photos.search( # 検索キーワード text = vehiclename, # 取得するデータ件数 per_page = 400, # 検索するデータの種類(ここでは、写真) media = 'photos', # データの並び順(関連順) sort = 'relevance', # UI コンテンツを表示しない safe_search = 1, # 取得したいオプションの値(url_q->画像のアドレスが入っている情報、licence -> ライセンス情報) extras = 'url_q, licence' ) # 結果を表示 photos = result['photos'] pprint(photos) # 追記 for photo in photos['photo']: url_q = photo['url_q'] filepath = savedir + '/' + photo['id'] + '.jpg' # ファイルが重複していたらスキップする if os.path.exists(filepath): continue # データをダウンロードする urlretrieve(url_q, filepath) # 重要:サーバを逼迫しないように 1 秒待つ time.sleep(wait_time) コード

###試したこと
今のところ試したことはありません。
調べたところUCS-2が今の環境に対応したものでないことと、それが絵文字などのデータ類であること、その程度です。

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

エラーが表示されたのは検索項目に'ship'を指定してコマンドを実行したときです。
必要なライブラリ群はすべて最新のものに更新してあります。

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

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

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

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

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

quickquip

2018/06/26 01:48

どうやって実行しているかの情報と、エラーの全文が要るでしょうか
A_miyaki

2018/06/26 02:45

実行したときの状況を記載したのは、'car'で実行したときはエラーが出なかったためです。エラーを全文載せたのはどこからどこまで必要かわからなかったからです。あと記載するのを忘れていましたが、OSはWindows10です。
quickquip

2018/06/26 02:52 編集

「要るでしょうか」は「要るだろうと推測します」という意味でした。すみません。今の質問だとどうやって実行しているかもわかりませんし、エラーが出ている箇所もわかりません。
quickquip

2018/06/26 02:52

「エラーの全文」はバックトレースも含めた全部という意味です。
A_miyaki

2018/06/26 03:03

意図を理解できていませんでした。実行はPythonに付属しているIDLEを使用しています。一応PyCharmはインストールしてありますが、Anacondaは入っていません。エラーは最後に表示されている部分のみです。全文で記載しなおします。
guest

回答1

0

ベストアンサー

提示メッセージと以下の検証結果からIDLE上で実行させておりpprint(photos)行で発生していると推測して回答します。

PlainText

1Python 3.5.5 |Anaconda custom (64-bit)| (default, Apr 7 2018, 04:52:34) [MSC v.1900 64 bit (AMD64)] on win32 2Type "copyright", "credits" or "license()" for more information. 3>>> from pprint import pprint 4>>> pprint('a\U0001F44D') 5Traceback (most recent call last): 6 File "<pyshell#1>", line 1, in <module> 7 pprint('a\U0001F44D') 8 File "C:\Program Files\Anaconda3\lib\pprint.py", line 53, in pprint 9 printer.pprint(object) 10 File "C:\Program Files\Anaconda3\lib\pprint.py", line 139, in pprint 11 self._format(object, self._stream, 0, 0, {}, 0) 12 File "C:\Program Files\Anaconda3\lib\pprint.py", line 176, in _format 13 stream.write(rep) 14 File "C:\Program Files\Anaconda3\lib\idlelib\PyShell.py", line 1344, in write 15 return self.shell.write(s, self.tags) 16UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 2-2: Non-BMP character not supported in Tk 17>>>

絵文字などのUnicodeBMP外の文字がphotosに含まれていると提示エラーが発生します。
BMP外の文字をBMP内の文字に置換することでprintできるようになります。

参考:'UCS-2' codec can't encode characters in position 1050-1050

Python

1import sys 2# BMP外の文字を0xfffd(REPLACEMENT CHARACTER)に置き換えるためのマップ 3non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd) 4 5# ?に置き換えることもできる 6# cp932環境などREPLACEMENT CHARACTERも表現できない場合など 7non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0x003f) 8 9s = '\U0001F44Dabc' # ????abc 10print( s.translate(non_bmp_map))

なお、エラーメッセージ全文(Traceback)にはエラーの発生場所も含め問題解決のために重要な情報が含まれていますので、可能な限り省略せずに提示ください。

投稿2018/06/26 03:02

can110

総合スコア38233

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

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

A_miyaki

2018/06/26 03:09

エラーメッセージは全文で記載しなおしました。推測されたとおり、pprint (photo)でエラーが出ていました。少ない情報から解決策まで提示していただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問