python: нижний () немецкий умлаутс
У меня проблема с преобразованием прописных букв с умлаутами в строчные.
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" не может декодировать байт 0xc3 в позиции 0: ординал не в пределах досягаемости (128)
3 ответа
Вам нужно будет пометить ее как строку Unicode, если вы не работаете с простым ASCII;
> print(u"ÄÖÜAOU".lower())
äöüaou
Он работает так же при работе с переменными, все зависит от типа, назначенного переменной для начала.
> olle = "ÅÄÖABC"
> print(olle.lower())
ÅÄÖabc
> olle = u"ÅÄÖABC"
> print(olle.lower())
åäöabc
Вы имеете дело с закодированными строками, а не с текстом Unicode.
.lower()
Метод байтовых строк может иметь дело только со значениями ASCII. Расшифруйте вашу строку в Unicode или используйте unicode
буквальный (u''
), затем строчные:
>>> print u"\xc4AOU".lower()
äaou
Если вы используете Python 2, но не хотите ставить префикс u"" во всех ваших строках, поместите это в начало вашей программы:
from __future__ import unicode_literals
olle = "ÅÄÖABC"
print(olle.lower())
сейчас вернется:
åäöabc
Кодировка определяет, как интерпретировать символы, считанные с диска, в программу, но оператор from __uture __ import указывает, как интерпретировать эти строки в самой программе. Вам, вероятно, понадобятся оба.