python: lower() 德语变音符

8 投票
3 回答
6108 浏览
提问于 2025-04-17 16:56

我遇到了一个问题,就是把带有变音符的字母从大写转换成小写。

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("ä", "x") UnicodeDecodeError: 'ascii' 编码无法解码字节 0xc3 在位置 0: 序号不在范围内(128)

3 个回答

2

如果你在用Python 2,但不想在每个字符串前面加上u"",可以在程序开头加上这段代码:

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

这样就会返回:

åäöabc

编码是用来说明如何把从磁盘读取的字符转化成程序能理解的内容,而from __ future __ import这条语句则是告诉程序如何理解这些字符串。你可能需要同时使用这两者。

3

你正在处理的是编码过的字符串,而不是普通的unicode文本。

字节字符串的 .lower() 方法只能处理ASCII值。你需要先把字符串解码成Unicode,或者使用 unicode 字面量(u''),然后再转换成小写:

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

如果你不是在处理普通的ASCII字符,你需要把它标记为unicode字符串。

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

äöüaou

在处理变量的时候也是一样,关键在于你最开始给变量指定的类型。

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

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

撰写回答