2016-06-28 1 views
-2

Я использую словарь для хранения некоторых пар символов в Python (я заменяю символы умляута). Вот как это выглядит:Использование unicode/umlauts в Python: Словарь v ручной ввод

umlautdict={ 
    'ae': 'ä', 
    'ue': 'ü', 
    'oe': 'ö' 
    } 

Тогда я запускаю inputwords через него так:

for item in umlautdict.keys(): 
     outputword=inputword.replace(item,umlautdict[item]) 

Но это ничего не делать (замена не происходит). Когда я напечатал мой umlautdict, я увидел, что это выглядит следующим образом:

{'ue': '\xfc', 'oe': '\xf6', 'ae': '\xc3\xa4'} 

Конечно, это не то, что я хочу; однако, такие вещи, как unicode() (-> Ошибка) или предварительная фиксация u не улучшали ситуацию.

Если я печатаю «A» или «O» в replace() команду вручную, все работает просто отлично. Я также изменил настройки в моем скрипте (работая в TextWrangler) до # -*- coding: utf-8 -*-, так как он мог бы даже запустить скрипт, содержащий umlauts без него.

Так что я не получаю ...

  • Почему это происходит? Почему и когда умляуты меняются от «хорошего к злу», когда я храню их в словаре?

  • Как это исправить?

  • Также, если кто знает: что такое хороший ресурс, чтобы узнать о кодировке в Python? У меня есть проблемы все время и так много вещей не имеют смысла для меня/я не могу обернуть голову.

Я работаю над Mac в Python 2.7.10. Спасибо за вашу помощь!

+0

Какая у вас версия python? – Kasramvd

+0

@ Kasramvd Python 2.7.10. Я добавлю это выше – patrick

+0

Довольно уверен, что это ** работает **, и вы просто испортили это нелогичным использованием 'inputword' и' outputword'. –

ответ

2
  1. Заявить о своем кодировании.
  2. Использование raw формат для специальных символов.
  3. Итерации правильно на вашей строке: сохраняйте изменения с каждой итерации цикла, когда вы направляетесь к следующему.

Вот код, чтобы получить работу:

\# -*- coding: utf-8 -*- 

umlautdict = { 
    'ae': r'ä', 
    'ue': r'ü', 
    'oe': r'ö' 
    } 

print umlautdict 

inputword = "haer ueber loess" 
for item in umlautdict.keys(): 
     inputword = inputword.replace(item, umlautdict[item]) 

print inputword 

Выход:

{'ue': '\xc3\xbc', 'oe': '\xc3\xb6', 'ae': '\xc3\xa4'} 
här über löss 
3

Преобразования в Unicode осуществляется декодирования вашей строки (при условии, что вы получаете байты):

data = "haer ueber loess" 
word = data.decode('utf-8') # actual encoding depends on your data 

Определите Dict с юникод строками, а также:

umlautdict={ 
    u'ae': u'ä', 
    u'ue': u'ü', 
    u'oe': u'ö' 
    } 

print umlautdict и, наконец, напечатает некоторое представление о том Словаре, как правило, с участием побегов. Это нормально, вам не о чем беспокоиться.

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