这是我的情景: 我有一个Unicode字符串列表。我收到一个名为'输入'的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
输入是&#34; request.data&#34;来自Flask微框架中的请求对象
答案 0 :(得分: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
的列表中。 : - )