1

これが私のシナリオです。Unicode 文字列のリストがあります。「input」という名前の utf8 文字列を受け取り、それをリスト内の残りの要素とともにログに記録したいと考えています。デコードして Unicode オブジェクトを取得しますが、リストに追加すると、その型が "str" に変わります。ここで何が起きてるの?

a_list = [u"ááááá", u"eééééée"]
#'input' is a utf8 str
obj = input.decode("utf-8")
log.debug(type(obj))
log.debug(obj)
a_list.append(obj)
for elem in a_list:
    log.debug(type(elem))

ログ:

DEBUG - <type 'unicode'>' # obj
<(THIS IS ONLY FOR SIMPLIFY) obj with accents (unicode chars)>
DEBUG - <type 'unicode'>'
DEBUG - <type 'unicode'>'
DEBUG - <type 'str'>'   # ------> obj's type changed!!!

編集: Python 2.7.3

入力は、Flask マイクロフレームワークの要求オブジェクトからの「request.data」です。

4

1 に答える 1

2

おっしゃるとおりこんなことはありえません。動作を再現するコードは次のとおりです。

# -*- coding: UTF-8 -*-
a_list = [u"ááááá", u"eééééée"]
input = '\xc3\x85 i \xc3\xa5a \xc3\xa4 e \xc3\xb6'
obj = input.decode("utf-8")
print type(obj)
print obj
a_list.append(obj)
for elem in a_list:
    print type(elem)

出力は次のとおりです。

<type 'unicode'>
Å i åa ä e ö
<type 'unicode'>
<type 'unicode'>
<type 'unicode'>

関連するオブジェクトの一部は、この変換を行う組み込み型以外でなければなりません。

input追加するつもりだったリストに単純に追加しない限りobj。:-)

于 2013-07-04T10:32:30.690 に答える