Pythonエラー対応: UnicodeEncodeError: 'ascii' codec can't encode characters

結論

Pythonの文字コードを utf-8 に設定する。

概要

python で以下のような画像URLから画像をダウンロードする処理を実装した所
掲題のエラーが発生しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8 -*-

import urllib
import urllib2
import os.path
import sys
from HTMLParser import HTMLParser

def download(url):
img = urllib.urlopen(url)
localfile = open(os.path.basename(url),'wb')
localfile.write(img.read())
img.close()
localfile.close()
  • 具体的にはここでこけてました。
1
localfile.write(img.read())

環境

  • CentOS Linux release 7.0.1406 (Core)
  • Python 2.7.5

文字コード確認

以下対話式で確認してみると ascii と表示されました。
これを utf-8 に変更します。

1
2
3
4
$ python
>>> import sys
>>> sys.getdefaultencoding()
'ascii'

pip パス確認

バージョン確認時にパスが出力されます。

1
2
$ pip --version
pip 7.1.0 from /usr/lib/python2.7/site-packages (python 2.7)

site-packages配下に sitecustomize.py を作成

1
vi /usr/lib/python2.7/site-packages/sitecustomize.py
1
2
import sys
sys.setdefaultencoding('utf-8')

上記内容で保存。

再度文字コード確認

utf-8 になりました。

1
2
3
4
$ python
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

これで掲題のエラーが解決されました。

Pythonエラー対応: UnicodeEncodeError: 'ascii' codec can't encode characters

https://kenzo0107.github.io/2016/02/15/2016-02-16-python-error-unicodeencodeerror-ascii-codec-cant-encode-characters/

Author

Kenzo Tanaka

Posted on

2016-02-16

Updated on

2020-05-07

Licensed under

コメント