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 回答