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

#結論
>
| 文字コード | 「あ」の文字コード | len('あ') |
|:--         |:--                 |        --:|
| unicode    | \u3042             | 1         |
| euc-jp     | \xa4\xa2           | 2         |
| utf-8      | \xe3\x81\x82       | 3         |
>
| 変換                          | コード                                           | 戻り値           |
|:--                            |:--                                               |:--               |
| euc-jp  → unicode            | unicode('\xa4\xa2','euc-jp')                     | u'\u3042'        |
| euc-jp  → unicode            | '\xa4\xa2'.decode('euc-jp')                      | u'\u3042'        |
| utf-8   → unicode            | unicode('\xe3\x81\x82','utf-8')                  | u'\u3042'        |
| utf-8   → unicode            | '\xe3\x81\x82'.decode('utf-8')                   | u'\u3042'        |
| unicode → euc-jp             | u'\u3042'.encode('euc-jp')                       |   '\xa4\xa2'     |
| unicode → utf-8              | u'\u3042'.encode('utf-8')                        |   '\xe3\x81\x82' |
| utf-8   → unicode → euc-jp  | unicode('\xe3\x81\x82','utf-8').encode('euc-jp') |   '\xa4\xa2'     |
| utf-8   → unicode → euc-jp  | '\xe3\x81\x82'.decode('utf-8').encode('euc-jp')  |   '\xa4\xa2'     |
| euc-jp  → unicode → utf-8   | unicode('\xa4\xa2','euc-jp').encode('utf-8')     |   '\xe3\x81\x82' |
| euc-jp  → unicode → utf-8   | '\xa4\xa2'.decode('euc-jp').encode('utf-8')      |   '\xe3\x81\x82' |


#Unicode
>
```pycon:Unicodeの時
>>> string=u'あ'
>>> string
u'\u3042'
```

#EUC-JP -> Unicode
>
```pycon:EUC-JPの時
>>> string='あ'
>>> string
'\xa4\xa2'
>>> len(string)
2
```
>>
```pycon:誤
>>> unicode(string)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa4 in position 0: ordinal not in range(128)
```
>>
```pycon:正
>>> unicode(string,'euc-jp')
u'\u3042'
```

#UTF -> Unicode
>
```pycon:UTF-8の時
>>> string='あ'
>>> string
'\xe3\x81\x82'
>>> len(string)
3
```
>>
```pycon:誤
>>> unicode(string)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
```
>>
```pycon:正
>>> unicode(string,'utf-8')
u'\u3042'
```

# 文字コード変換関数＆メソッド

| 変換種別                          | 関数 or メソッド                                            |
|:--                                |:--                                                          |
|非unicode文字列 → unicode文字列   | unicode([非unicode文字列], [文字コード], [errors='strict']) |
|非unicode文字列 → unicode文字列   | 非unicode文字列.decode([文字コード], [errors='strict'])     |
|unicode文字列   → 非unicode文字列 | unicode文字列.encode([文字コード], [errors='strict'])       |

errors

|unicode|encode|decode| errors            | 内容                                     |
|:--:   |:--:  |:--:  |:--                |:--                                       |
| ○    | ○   | ○   | strict            | UnicodeDecodeError を送出する            |
| ○    | ○   | ○   | replace           | U+FFFD, ‘REPLACEMENT CHARACTER’ を追加 |
| ○    | ○   | ○   | ignore            | 結果の Unicode 文字列から文字を除く      |
| ×    | ○   | ×   | xmlcharrefreplace | XML 文字参照を使う                       |