Ezio Melotti <ezio.melo...@gmail.com> added the comment: Indeed this seems a different issue, and might be worth fixing it. Given this definition: str.capitalize()¶ Return a copy of the string with its first character capitalized and the rest lowercased. we might implement capitalize like: >>> def mycapitalize(s): ... return s[0].upper() + s[1:].lower() ... >>> 'fOoBaR'.capitalize() 'Foobar' >>> mycapitalize('fOoBaR') 'Foobar'
And this would yield the correct result: >>> s = u'\u1ff3\u1ff3\u1ffc\u1ffc' >>> print s ῳῳῼῼ >>> print s.capitalize() ῼῳῼῼ >>> print mycapitalize(s) ῼῳῳῳ >>> s.capitalize().istitle() False >>> mycapitalize(s).istitle() True This doesn't happen because the actual implementation of str.capitalize checks if a char is uppercase (and not if it's titlecase too) before converting it to lowercase. This can be fixed doing: diff -r cb44fef5ea1d Objects/unicodeobject.c --- a/Objects/unicodeobject.c Thu Jul 21 01:11:30 2011 +0200 +++ b/Objects/unicodeobject.c Thu Jul 21 07:57:21 2011 +0300 @@ -6739,7 +6739,7 @@ } s++; while (--len > 0) { - if (Py_UNICODE_ISUPPER(*s)) { + if (Py_UNICODE_ISUPPER(*s) || Py_UNICODE_ISTITLE(*s)) { *s = Py_UNICODE_TOLOWER(*s); status = 1; } ---------- assignee: -> ezio.melotti status: closed -> open versions: +Python 2.7, Python 3.2, Python 3.3 -Python 3.1 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue12266> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com