На самом деле, в качестве общей стратегии лучше всегда сохранять текст в Unicode, когда он находится в памяти: декодировать его в момент ввода и кодировать точно в тот момент, когда вам нужно вывести его, если есть определенная кодировка требования к времени ввода и / или ввода.
Даже если вы не решите принять эту общую стратегию (и вам следует!), Единственный надежный способ выполнить требуемую задачу - это все равно декодировать, обрабатывать, кодировать снова - никогда не работать с закодированными формами , I.e.:
mystring = "işğüı"
print mystring.decode('utf-8').upper().encode('utf-8')
при условии, что вы ограничены закодированными строками при назначении и для целей вывода. (Выходное ограничение, к сожалению, реалистично, ограничение присваивания - нет, просто выполните mystring = u"işğüı"
, сделав его юникодным с самого начала, и сохраните себя хотя бы при вызове .decode
! -)