PYTHON:将列表添加到unicode会将其类型更改为str

时间:2013-07-04 10:21:02

标签: python unicode encoding flask

这是我的情景: 我有一个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微框架中的请求对象

1 个答案:

答案 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的列表中。 : - )