【发布时间】:2019-12-03 01:19:54
【问题描述】:
当我偶然发现一个奇怪的结果时,我正在使用一个涉及 str.upper() 和 str.lower() 函数的 Python 脚本。当我将字母 ᾉ(带有 dasia 和 prosgegrammeni 的大写字母,U+1F89)传递给upper() 函数时,结果是ἉΙ,而不是预期的ᾉ。
要重现的代码:
print('ᾉ'.upper())
打印
ἉΙ
这是预期的行为还是某种错误?
编辑:我替换为正确的字符。
【问题讨论】:
-
更奇怪的是,
'a'.upper().lower()按预期回馈'a',但'ᾉ'.upper().lower()回馈'ἁι' -
这可能是一个标准化问题。这里的
upper方法正在执行将单个字符转换为两个字符的有损转换。结果字符串不包含小写版本应将两者“组合”成单个字符的信息。 -
嗯,这有点烦人……有什么办法可以避免吗?
-
@Darmo:您可能正在寻找
'ᾉ'.title()而不是'ᾉ'.upper()。 Here 是标题和大写不同的所有 unicode 字符的列表。
标签: python unicode python-3.7 uppercase