在德语环境中并使用 Python 3.x - 如何在将 ASCII 字符转换为大写时保留变音符号?
In a German environment and working with Python 3.x - how can I preserve umlauts while converting ASCII characters to upper case?
在德语环境中使用 Python 3.x - 如何在将 ASCII 字符转换为大写时保留变音符号? "Öfter TUT Übermut SELTEN gut".lower()
产生 "öfter tut übermut selten gut"
。但是,我想保留 'Ö' 和 'Ü'。
可能有更好(更有效)的解决方案,但是:
s = "Öfter TUT Übermut SELTEN gut"
def lower_ascii(sentence):
res = []
for char in sentence:
if ord(char) <= 122: # 122 == z
res.append(char.lower())
else:
res.append(char)
return ''.join(res)
print(lower_ascii(s))
输出:
Öfter tut Übermut selten gut
解释:
ord()
为您提供该字符的值作为 int (unicode)。了解它 here
- Ascii
z
是 122 和 [a-z] 和 [A-Z] 之间的较高值(用 ord('z')
核对)
- 所以我所做的是转换任何低于
z
的东西(因为所有变音符号都有更高的值),其余的保持原样
- 使用列表来存储每个字符并将其组合回字符串而不是追加新字符串,因为
str
是不可变的(应该“更快”并且需要更少 space)
您可以使用相同的循环在 ascii/non-ascii 个字符中执行您需要的任何操作
在德语环境中使用 Python 3.x - 如何在将 ASCII 字符转换为大写时保留变音符号? "Öfter TUT Übermut SELTEN gut".lower()
产生 "öfter tut übermut selten gut"
。但是,我想保留 'Ö' 和 'Ü'。
可能有更好(更有效)的解决方案,但是:
s = "Öfter TUT Übermut SELTEN gut"
def lower_ascii(sentence):
res = []
for char in sentence:
if ord(char) <= 122: # 122 == z
res.append(char.lower())
else:
res.append(char)
return ''.join(res)
print(lower_ascii(s))
输出:
Öfter tut Übermut selten gut
解释:
ord()
为您提供该字符的值作为 int (unicode)。了解它 here- Ascii
z
是 122 和 [a-z] 和 [A-Z] 之间的较高值(用ord('z')
核对) - 所以我所做的是转换任何低于
z
的东西(因为所有变音符号都有更高的值),其余的保持原样 - 使用列表来存储每个字符并将其组合回字符串而不是追加新字符串,因为
str
是不可变的(应该“更快”并且需要更少 space)
您可以使用相同的循环在 ascii/non-ascii 个字符中执行您需要的任何操作