python:lower()德语变音符号

问题描述:

我在将大写字母与变音符号转换为小写字母时遇到问题。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? – 2013-02-24 14:46:02

+0

Python 2.7.2 OSX附带的一个。 – user2104634 2013-02-24 14:46:27

+3

@ user2104634这是你的问题。 – 2013-02-24 14:46:53

你会需要将其标记为unicode字符串,除非您使用纯ASCII;

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

äöüaou 

它在处理变量时的工作原理相同,都取决于分配给变量的类型。

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

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

我有# - * - 编码:utf-8 - * - 在第一行,看起来像它的Python版本BlaXpirit建议。 – user2104634 2013-02-24 14:50:39

+0

@ user2104634上面的例子是在Mac OS X上的标准Python 2.7.2上运行的。没有标记为unicode,它只会将ascii字符转换为小写字母,使用'u'标记,它会给出正确的输出。 – 2013-02-24 14:51:57

+0

那么标签在开始时是不够的? – user2104634 2013-02-24 14:54:52

您正在处理编码字符串,而不是使用unicode文本。

字节串的.lower()方法只能处理ASCII值。解码你的字符串为Unicode或使用unicode文字(u''),然后小写:

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

@ user2104634:您需要阅读[Python Unicode HOWTO](http://docs.python.org/2/howto/unicode.html);你将该变量解码为一个“unicode”值('variable.decode(encoding')')。 – 2013-02-24 15:00:29

如果你使用的是Python 2,但不希望前缀U“”上您的所有字符串把这个开头你的程序:

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

现在将返回:

åäöabc 

编码指定如何解释字符从磁盘读入程序控制am,但from __ future __ import语句告诉我们如何在程序本身中解释这些字符串。你可能会需要两个。