【问题标题】:python: lower() german umlautspython: lower() 德语变音符号
【发布时间】:2013-02-09 18:17:21
【问题描述】:

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

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)

Traceback(最近一次调用最后一次): 文件“Untitled.py”,第 4 行,在 original_message=original_message.replace("ä", "x") UnicodeDecodeError:“ascii”编解码器无法解码位置 0 的字节 0xc3:序数不在范围内(128)

【问题讨论】:

  • 你用的是python 2还是python 3?
  • Python 2.7.2 随 OSX 一起提供。
  • @user2104634 你的问题。

标签: python unicode diacritics lowercase case-folding


【解决方案1】:

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

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

现在将返回:

åäöabc

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

【讨论】:

  • 今天,我的建议是 -- 使用 Python 3。unicode_literals 不能在足够多的地方工作,不值得。
【解决方案2】:

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

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

äöüaou

在处理变量时也是如此,这完全取决于分配给变量的类型。

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

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

【讨论】:

  • 我有 # -- coding: utf-8 -- 在第一行,看起来像 BlaXpirit 建议的 Python 版本。
  • @user2104634 上面的示例在 Mac OS X 上的标准 Python 2.7.2 上运行。没有标记为 unicode,它只会将 ascii 字符转换为小写,使用 u 标记,它给出正确的输出。
  • 那么开头的tag不够用?
  • 标签只是告诉 Python 文件的编码。
  • @user2104634 正如 Matthias 所说,编码元数据只是帮助 Python 正确检测文件的编码,它与运行时的 ascii 和 unicode 字符串无关。
【解决方案3】:

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

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

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

【讨论】:

  • @user2104634:你需要阅读Python Unicode HOWTO;您将变量解码为 unicode 值 (variable.decode(encoding'))。
猜你喜欢
  • 2016-01-21
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 2013-12-25
  • 2016-06-16
相关资源
最近更新 更多