To rzeczywiście najlepiej, zgodnie z ogólną strategią, aby zawsze zachować swój tekst jako Unicode raz to w pamięci: dekodować go w tej chwili jest to wejście, i zakodować go dokładnie w tym momencie trzeba wyjściem byłoby, gdyby istnieją specyficzne wymagania dotyczące kodowania na wejściach i/lub czasach wejścia.
Nawet jeśli nie zdecydujesz się na przyjęcie tej ogólnej strategii (i powinieneś!), Jedynym sposobem na wykonanie wymaganego zadania jest jeszcze dekodowanie, przetwarzanie, kodowanie ponownie - nigdy do pracy na kodowanym formularze. Np .:
mystring = "işğüı"
print mystring.decode('utf-8').upper().encode('utf-8')
zakładając, że jesteś ograniczony do zakodowanych ciągów podczas przypisywania i do celów wyjściowych. (Ograniczenie wyjściowe jest niestety realistyczne, ograniczenie przypisania nie jest - po prostu wykonaj mystring = u"işğüı"
, odznaczając je od początku na Unicode i zachowaj przynajmniej wywołanie .decode
! -)
Dane wyjściowe wygenerowane przez tę odpowiedź (IŞĞÜI, zaczynając od U + 0049 LATYNOWY LITER KAPITAŁOWY I) różni się od poprawnego wyniku dostarczonego przez pytanie (İŞĞÜI, poczynając od U + 0130 LATIN CAPITAL LIST I I WITH DOT ABOVE). – thomasd