Что @Thanakon отметил кратко правильно: Вы можете сделать это на Unicode Строка.
Вы спрашивали почему Python не делает этого на «узких» строках. Причина в том, что Unicode - это действительно вещь - с точки зрения памяти и обработки. Это определенно не тривиально. Взгляните на определение Unicode или реализацию ICU Library.
Когда Python был задуман, еще в начале 90-х годов Unicode в строках еще не был большой проблемой. Для сообщества Python обратная совместимость всегда была большой проблемой. Поэтому было бы очень сложно просто «unicode upcasing на узких строках» в некоторой версии 2.x.
Но другие люди не были удовлетворены этим решением в 2000-х годах, поэтому они изобрели новый тип данных : unicode
. Если вы разместите свои данные, вы получите полнофункциональные функции Unicode. Есть другие модули для вашего удобства тоже ...
О, и кстати: Узкая строка, которую вы показали должен быть интерпретированы в кодировке, прежде чем она имеет смысл UPCASE его в юникод-иш. Как ваши строки отображаются здесь один многих интерпретаций кодирования (ISO-8859-1, может быть?)
Но теперь хорошая вещь: В Python 3 они решили, что стоит нарушить обратную совместимость. Строка по умолчанию - это строка Юникода! Когда вы пишете 'hello'
в Python 3, это то же самое, что и в Python 2 u'hello'
. И на этом вы получаете Unicode-функциональность.
В любом случае, в Python 2 с u'blah'
или Python 3 'blah'
вы должны убедиться, что питон-файл сохранен в кодировке UTF-8 (или аналогичный).В Python 3 это standard encoding из *.py
-файлов. В Python 2 вы должны add an header-line# -*- coding: utf-8 -*-
, содержащий кодировку файлов, или убедитесь, что ваш редактор пишет UTF-8 BOM mark.