2013-02-24 27 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

あなたはPython 2または3を使用していますか? –

+0

Python 2.7.2 OSXに同梱されています。 – user2104634

+3

@ user2104634問題があります。 –

答えて

8

あなた'LLプレーンなASCIIで作業している場合を除き、Unicode文字列としてマークする必要があります。

> 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で実行されました。ユニコードとしてマークされていない場合、 'u'マーカーでascii文字を小文字に変換するだけで、正しい出力が得られます。 –

+0

最初のタグでは十分ではありませんか? – user2104634

2

ユニコードテキストではなく、エンコードされた文字列を扱っています。

バイト文字列の.lower()メソッドは、ASCII値のみを扱うことができます。すべてのあなたの文字列に「」Pythonの2を使用しているが、Uを接頭辞にしたくない場合は最初にこれを入れ

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

@ user2104634:[Python Unicode HOWTO](http://docs.python.org/2/howto/unicode.html)を読む必要があります。変数を 'unicode'値にデコードします(' variable.decode(encoding ') ')。 –

1

:小文字、その後、Unicodeにあなたの文字列をデコードしたり(u''unicodeリテラルを使用しますあなたのプログラムの:

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

は今返します。

åäöabc 

をエンコードが文字を解釈する方法を指定PROGRにディスクから読み込ましかし、from __ future __ import文は、プログラム内でこれらの文字列をどのように解釈するかを示します。おそらく両方必要です。

関連する問題