encode, decodeのおさらい

>>> u'あ'
u'\u3042'
>>> print u'あ'
あ
>>> u'あ'.encode('utf-8')
'\xe3\x81\x82'
>>> print u'あ'.encode('utf-8')
あ
>>> 'あ'.decode('utf-8')
u'\u3042'
>>> u'\u3042'
u'\u3042'
>>> print u'\u3042'
あ
>>> print u'\xe3\x81\x82'
ã
>>> print '\xe3\x81\x82'
あ
>>> '\xe3\x81\x82'.decode('utf-8')
u'\u3042'
>>> '\xe3\x81\x82'.encode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
>>> u'\u3042'.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.5/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u3042' in position 0: ordinal not in range(128)