2009-06-13 7 views

답변

28

파이썬은 일반 문자열로 이름을보고 가정하면, 먼저 유니 코드로 디코딩해야합니다 :

>>> name 
'Christensen Sk\xf6ld' 
>>> unicode(name, 'latin-1') 
u'Christensen Sk\xf6ld' 

이 달성의 또 다른 방법 :

>>> name.decode('latin-1') 
u'Christensen Sk\xf6ld' 
을 다음의 예를 참조하십시오

문자열 앞의 "u"에 유의하십시오. 당신이 인쇄하는 경우, 악센트 문자가 제대로 표시됩니다 :

>>> print name.decode('latin-1') 
Christensen Sköld 

BTW : 필요한 경우, 당신은 예를 들어,에 유니 코드를 설정하는 데 "인코딩"방법을 사용할 수 있습니다 UTF-8 문자열 : 유니 코드와 바이트 문자열을 감안할 때

>>> name.decode('latin-1').encode('utf-8') 
'Christensen Sk\xc3\xb6ld' 
+0

고마워. 그래서 그것을 데이터베이스에 저장해야 할 필요가 있다면 디코드하고 데이터베이스에 저장할 수 있습니까? – Vicky

+1

아니요, Mark의 예를 다시 읽으십시오. (latin1, cp1252 등)에서 유니 코드로 데이터를 디코딩 한 후에는 (1) 데이터베이스가 지원하고 (2) 모든 유니 코드 문자를 유지하는 인코딩으로 유니 코드 문자열을 인코딩해야합니다. 일반적으로 UTF-8 . –

8

나는 그것이 올바르게 작동하고 있다고 생각합니다. 기본적으로 파이썬은 모든 터미널이 유니 코드를 지원하지 않기 때문에 ASCII 인코딩으로 문자열을 표시합니다. 실제로 문자열을 인쇄하면 작동합니다.

>>> u'\xcfa' 
u'\xcfa' 
>>> print u'\xcfa' 
Ïa 
+0

터미널에 문제가있는 경우 데이터베이스 (MySQL)에 저장하면 제대로 표시 되나요? – Vicky

+0

네, 그래도되지만 DB의 데이터 정렬/문자 세트 인코딩을 처리해야합니다. – securecurve

6

b"\N{SNOWMAN}", b"\N{SNOWMAN}".decode('unicode-escape)가 예상 유니 코드 문자열 u'\u2603'를 생성합니다 이스케이프합니다.

관련 문제