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 указывает, как интерпретировать эти строки в самой программе. Вам, вероятно, понадобятся оба.

Другие вопросы по тегам