Python3 の文字列 覚書

Python3ではstring = unicode

string をアレーとして考えてslice するときもマルチバイト文字を気にする必要がない。

>>> s = 'pythonに、どっぷりつかる'
>>> len(s)
15
>>> s[8:]
'どっぷりつかる'
>>> s[:6]
'python'
>>> s[:7]+s[8:12]
'pythonにどっぷり'
>>> 

ただ、よいことばかりではなく、fileなどからのIO処理では読み込まれるのがバイト列になるため変換をしてあげる必要がある。 Python 2.7では必要なかったのでPython2.xのプログラムを移植するときに注意が必要。encode()としてunicodeのバイト列表示、decode()でUnicodeのバイト列をUnicodeの文字列表示

>>> s.encode()
b'python\xe3\x81\xab\xe3\x80\x81\xe3\x81\xa9\xe3\x81\xa3\xe3\x81\xb7\xe3\x82\x8a\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8b'
>>> b'python\xe3\x81\xab\xe3\x80\x81\xe3\x81\xa9\xe3\x81\xa3\xe3\x81\xb7\xe3\x82\x8a\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8b'.decode()
'pythonに、どっぷりつかる'
>>> 

最初のバイト列がUnicode以外の文字列の場合はencodingを指定

>>> chara = b'\x63\x6c\x69\x63\x68\xe9'
>>> print(chara)
b'clich\xe9'
>>> print(chara.decode('latin-1'))
cliché

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.