「PythonのUnicodeDecodeErrorの対処方法」の版間の差分

提供: Python入門
移動: 案内検索
(ページの作成:「PythonのHTMLParserを使用して、HTMLをパースしていたときに UnicodeDecodeError(ユニコード デコード エラー) のエラーに遭遇しました。...」)
 
(概要)
行28: 行28:
 
   File "/usr/local/lib/python2.7/re.py", line 151, in sub
 
   File "/usr/local/lib/python2.7/re.py", line 151, in sub
 
     return _compile(pattern, flags).sub(repl, string, count)
 
     return _compile(pattern, flags).sub(repl, string, count)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 6: ordinal not in range(128)
+
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 6:
 +
ordinal not in range(128)
 
Exit 1
 
Exit 1
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 
== 対処法 ==
 
== 対処法 ==
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">

2015年2月8日 (日) 11:58時点における版

PythonのHTMLParserを使用して、HTMLをパースしていたときに UnicodeDecodeError(ユニコード デコード エラー) のエラーに遭遇しました。UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 6: ordinal not in range(128)

読み方

UnicodeDecodeError
ゆにこーど でこーど えらー

概要

以下のエラーメッセージが出現しました。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 6:
ordinal not in range(128)

ASCII(アスキー)をデコードしようと思ったけど、できなかった、ということのようです。

プログラムを実行するとこのようになります。

$ python parse.py
Traceback (most recent call last):
  File "parse.py", line 210, in <module>
    parser.feed(html)
  File "/usr/local/lib/python2.7/HTMLParser.py", line 108, in feed
    self.goahead(0)
  File "/usr/local/lib/python2.7/HTMLParser.py", line 148, in goahead
    k = self.parse_starttag(i)
  File "/usr/local/lib/python2.7/HTMLParser.py", line 252, in parse_starttag
    attrvalue = self.unescape(attrvalue)
  File "/usr/local/lib/python2.7/HTMLParser.py", line 393, in unescape
    return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));", replaceEntities, s)
  File "/usr/local/lib/python2.7/re.py", line 151, in sub
    return _compile(pattern, flags).sub(repl, string, count)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 6:
 ordinal not in range(128)
Exit 1

対処法

foo ( str );

なところを

foo ( str.decode('utf-8') );

とするだけで、解決しました。

関連項目