2013-02-24 2 views
6

움라우트로 대문자를 소문자로 변환 할 때 문제가 있습니다.python : lower() 독일어 움라우트

print("ÄÖÜAOU".lower()) 

A, O 및 U는 올바르게 변환되지만 Ä, Ö 및 Ü는 대문자로 유지됩니다. 어떤 아이디어?

첫 번째 문제는 .decode로 고정 ('UTF-8')하지만 난 여전히 두 번째가 :

# -*- coding: utf-8 -*- 
original_message="ÄÜ".decode('utf-8') 
original_message=original_message.lower() 
original_message=original_message.replace("ä", "x") 
print(original_message) 

역 추적 (가장 최근 통화 최종) : 파일 "Untitled.py" 라인 4 ORIGINAL_MESSAGE에서 = original_message.replace ("A", "X") 는 UnicodeDecodeError는 'ASCII'코덱 위치 0 바이트 0xc3를 디코딩 할 수있다 (128)

+3

파이썬 2 또는 3을 사용하고 있습니까? –

+0

Python 2.7.2는 OSX와 함께 제공됩니다. – user2104634

+3

@ user2104634 문제가 있습니다. –

답변

8

넌 정액 범위 내에 있지 서수 일반 ASCII로 작업하지 않는 한 유니 코드 문자열로 표시해야합니다.

> print(u"ÄÖÜAOU".lower()) 

äöüaou 

변수로 작업 할 때도 동일하게 작동합니다. 변수는 모두 변수에 할당 된 유형에 따라 다릅니다.

> olle = "ÅÄÖABC" 
> print(olle.lower()) 
ÅÄÖabc 

> olle = u"ÅÄÖABC" 
> print(olle.lower()) 
åäöabc 
+0

첫 번째 줄에는 # - * - coding : utf-8 - * -이 있고, BlaXpirit이 제안한 것처럼 Python 버전처럼 보입니다. – user2104634

+0

@ user2104634 위 예제는 Mac OS X의 표준 Python 2.7.2에서 실행되었습니다. 유니 코드로 표시하지 않으면 ascii 문자를 소문자로 변환하며 'u'표시로 올바른 출력을 제공합니다. –

+0

처음에는 태그가 충분하지 않습니까? – user2104634

2

유니 코드 텍스트가 아닌 인코딩 된 문자열을 처리하고 있습니다.

바이트 문자열의 .lower() 메서드는 ASCII 값만 처리 할 수 ​​있습니다. 유니 코드로 문자열을 디코딩 또는 문자 unicode (u''), 다음 소문자를 사용

>>> print u"\xc4AOU".lower() 
äaou 
+0

@ user2104634 : [Python Unicode HOWTO] (http://docs.python.org/2/howto/unicode.html)를 읽어야합니다. 변수를'unicode' 값으로 디코딩합니다 ('variable.decode (encoding ')'). –

1

파이썬이 사용하고 있지만, 초기에 넣어 모든 문자열을 ""U 접두사하지 않으려면 프로그램의 :

from __future__ import unicode_literals 
olle = "ÅÄÖABC" 
print(olle.lower()) 

이제 반환합니다

åäöabc 

인코딩은 문자가 progr으로 디스크에서 읽어 해석하는 방법을 지정합니다 그렇지만 from __ future __ import 문은 프로그램 자체에서 이러한 문자열을 해석하는 방법을 알려줍니다. 당신은 아마 둘 다 필요합니다.

관련 문제