python2 unicode str
unicode
unicodeは符号化スキームであり、utf-8はunicodeの実装形態である.
Python 2コード
python 2では
そうごへんかん
str->decode(‘utf-8’)->unicode unicode->encode(‘utf-8’)->strがファイルに書き込まれたときにstrタイプのものは直接書き込むことができ、unicodeタイプの必須encodeの後に書き込むことができます.
unicodeは符号化スキームであり、utf-8はunicodeの実装形態である.
Python 2コード
In [1]: a = ' '
In [2]: a
Out[2]: '\xe5\x95\x8a\xe5\x93\x88\xe5\x93\x88'
In [4]: type(a)
Out[4]: str
In [5]: len(a)
Out[5]: 9
In [6]: b = u' '
In [7]: type(b)
Out[7]: unicode
In [8]: len(b)
Out[8]: 3
In [9]: a.decode('utf-8')
Out[9]: u'\u554a\u54c8\u54c8'
In [10]: b
Out[10]: u'\u59da\u8d6b\u8d6b'
In [11]: b.encode('utf-8')
Out[11]: '\xe5\xa7\x9a\xe8\xb5\xab\xe8\xb5\xab'
In [12]: c = ' '
In [13]: c
Out[13]: '\xe5\xa7\x9a\xe8\xb5\xab\xe8\xb5\xab'
In [14]: import sys
In [15]: sys.getdefaultencoding()
Out[15]: 'ascii'
In [16]: b + c
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
16-c6b7c7e5694f> in ()
----> 1 b + c
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
In [17]: import sys
In [18]: relaod(sys)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
in ()
----> 1 relaod(sys)
NameError: name ' relaod' is not defined
In [19]: reload(sys)
sys' (built-in)>
In [20]: sys.setdefaultencoding('utf-8')
In [21]: b + c
Out[21]: u'\u59da\u8d6b\u8d6b\u59da\u8d6b\u8d6b'
In [22]: type(b + c)
Out[22]: unicode
python 2では
a=' '
,aのタイプはstrであり、符号化されたバイトシーケンスである.aの長さはバイト数である.bのタイプはunicode(テキスト文字列を格納する)であり、bの長さは文字数である.そうごへんかん
str->decode(‘utf-8’)->unicode unicode->encode(‘utf-8’)->strがファイルに書き込まれたときにstrタイプのものは直接書き込むことができ、unicodeタイプの必須encodeの後に書き込むことができます.