IPythonだと、"u"をつけてもunicode文字列として扱ってくれてない?
Python (command line)
>>> import sys >>> sys.getdefaultencoding() 'ascii' >>> src = u'あ' >>> src u'\u3042' >>> print src あ >>>
IPython
In [27]: import sys In [28]: sys.getdefaultencoding() Out[28]: 'ascii' In [29]: src = u'あ' In [30]: src Out[30]: u'\x82\xa0' In [31]: print src --------------------------------------------------------------------------- <type 'exceptions.UnicodeEncodeError'> Traceback (most recent call last) C:\<ipython console> in <module>() <type 'exceptions.UnicodeEncodeError'>: 'cp932' codec can't encode character u'\x82' in position 0: illegal multibyte sequence In [32]: src.encode('iso-8859-1') Out[32]: '\x82\xa0' In [33]: print src.encode('iso-8859-1') あ
微妙。"u"をつけてもunicode文字列として扱ってくれてない?
In [34]: src = 'あ' In [35]: src Out[35]: '\x82\xa0' In [36]: print src あ
latin-1としてencodeしたときにちゃんと表示されてるのは、"u"をつけないで日本語を入れたときと同じ理由というのはわかる。
unicodeとして処理しないで、多バイト文字を普通に1バイトずつ出力に渡して、cp932をデフォルトのエンコーディングとして扱っているコマンドプロンプトがたまたま、それを正しく解釈できたから、ということでしょう。
だから当然、
In [39]: len(src) Out[39]: 2
となる。