2013-07-04 2 views
1

이것은 내 시나리오입니다. 유니 코드 문자열 목록이 있습니다. 나는 'input'이라는 이름의 utf8 문자열을 받고 나머지 요소와 함께 목록에 기록하려고합니다. 그래서 그것을 디코드하고 유니 코드 객체를 얻습니다.하지만 목록에 추가하면 유형이 "str"으로 바뀝니다. 여기서 무슨 일이 일어나고있는거야?PYTHON : 목록에 유니 코드를 추가하면 해당 형식이 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!!! 

편집 : 파이썬 2.7.3

입력 플라스크 microframework의 요청 객체에서 "request.data은"방법은 없습니다

+0

파이썬 버전이란 무엇입니까? 필자는 Python 2.7.3에서이를 테스트했으며이 동작을 재현 할 수 없습니다. '입력 '은 어디에서 왔습니까? 'log.debug (obj)'는 유니 코드처럼 이상한 출력을줍니다 ... – ElmoVanKielmo

답변

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'> 

이 변환이 일어날 수 있도록 내장 유형 이외의 값을 가지고 있어야한다 관련된 개체의 일부.

obj을 추가하려는 목록에 input을 단순히 추가하지 않는 한. :-)

+0

OMG 정말 죄송합니다 ... 제 코드의 오타가 나를 미치게했습니다 ... 질문을 삭제해야합니까? –

+1

@ lennart-regebro, 내 작은 조사에서 결론을 확인해 주셔서 감사합니다 (질문에 대한 내 의견 참조). 이상한 행동을 재현 할 수있는 비슷한 테스트 코드를 만들었고 OP가 생각한 것과 다른 '입력'이 아닌지 의심 스러웠다. – ElmoVanKielmo

관련 문제