2015-07-28 2 views
3

У меня странное поведение функции string.title() Python, если строка содержит немецкие умлауты (üöä). Затем выполняется не только первый символ строки, но и символ, следующий за умлаутом.Проблема с Python string.title() с немецкими umlauts

# -*- coding: utf-8 -*- 
a = "müller" 
print a.title() 
# this returns >MüLler< , not >Müller< as expected 

Пытался исправить путем установки локали германскому UTF-8 кодировкой, но не успех:

import locale 
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8') 
a="müller" 
print a.title() 
# same value >MüLler< 

Любые идеи, чтобы предотвратить капитализацию после умляут?
Мой Python версии 2.6.6 на Debian Linux

ответ

5

Decode ваша строка Unicode, а затем использовать unicode.title():

>>> a = "müller" 
>>> a.decode('utf8').title() 
u'M\xfcller' 
>>> print a.decode('utf8').title() 
Müller 

Вы всегда можете кодировать UTF-8 снова позже.

+0

Или используйте Python 3. – doublep

+0

@doublep: где вы все равно можете воспроизвести ту же проблему, если используете 'bytes' вместо' str', что по сути является тем, что происходит здесь. –

+0

Да, но в Python 3 строковых литерала уже имеют тип, который раньше был «unicode», поэтому вам не нужно расшифровывать. – doublep

 Смежные вопросы

  • Нет связанных вопросов^_^