Pythonの文字列
pythonの文字列にはuicode文字列とstr文字列がある。簡単に違いを示すと、
・unicode文字列:文字列
・str文字列:バイト文字列
len()を使用すれば、そのことがよくわかる。
>>> len('もじれつ') 12 >>> len(u'もじれつ') 4
※u"ex"はunicode文字列への変換を表す。
unicode文字列も、str文字列もbasestringを継承している。
>> isinstance('あいうえお', basestring) True >>> isinstance(u'あいうえお', basestring) True >>> isinstance('あいうえお', unicode) False >>> isinstance(u'あいうえお', unicode) True >>> isinstance('あいうえお', str) True >>> isinstance(u'あいうえお', str) False
unicode文字列とstr文字列間で二項演算などを行うと、自動的にunicode文字列に変換される。
>>> u'aaa' == 'aaa' True
ただし、非ASCII文字を含むstr型をunicodeに変換しようとすると、エラーになる。
>>> u'aa' + 'あいうえお' 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'aa' + u'あいうえお' u'aa\u3042\u3044\u3046\u3048\u304a'
str文字列とunicode文字列は混ぜるな注意ということ。
基本的には、unicode文字列に変換しておくとハマりづらくなるのかな。
□str文字列とunicode文字列の変換
>>> #utf-8のunicode文字列を、utf-8のstr文字列に変換する >>> unicode = u'ああああああ' >>> len(unicode) 6 >>> len(unicode.encode('utf-8')) 18 >>> >>> #utf-8のstr文字列を、utf-8のunicode文字列に変換する。 ... str = 'ああああああ' >>> len(str) 18 >>> len(str.decode('utf-8')) 6
参考
http://d.hatena.ne.jp/nyagao/20070808/1186581885
http://blog.livedoor.jp/dankogai/archives/50696661.html
- 作者: Tarek Ziade,稲田直哉,渋川よしき,清水川貴之,森本哲也
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/05/28
- メディア: 大型本
- 購入: 33人 クリック: 791回
- この商品を含むブログ (90件) を見る