8

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

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' codec can't decode byte 0xc3 in position 0: ordinal不在范围内(128)

4

3 回答 3

9

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

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

äöüaou

使用变量时它的工作原理相同,这完全取决于分配给变量的类型。

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

> olle = u"ÅÄÖABC"
> print(olle.lower())
åäöabc
于 2013-02-24T14:47:48.520 回答
3

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

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

>>> print u"\xc4AOU".lower()
äaou
于 2013-02-24T14:48:02.567 回答
2

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

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

现在将返回:

åäöabc

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

于 2013-02-24T16:00:14.553 回答