python:lower()德语变音符号

时间:2013-02-24 14:43:45

标签: python unicode diacritics lowercase case-folding

我将使用变音符号的大写字母转换为小写字母时遇到问题。

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行,in     original_message = original_message.replace(“ä”,“x”) UnicodeDecodeError:'ascii'编解码器无法解码位置0的字节0xc3:序数不在范围内(128)

3 个答案:

答案 0 :(得分:8)

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

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

äöüaou

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

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

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

如果您使用的是Python 2,但又不想在所有字符串前加上“”,请将其放在程序的开头:

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

现在将返回:

åäöabc

编码指定如何将从磁盘读入的字符解释为程序,但from __ future __ import语句告诉如何在程序本身中解释这些字符串。你可能需要两者。