Python UTF-8小写土耳其语特定字母

ayy*_*mbo 7 python unicode encoding utf-8

使用python 2.7:

>myCity = 'Isparta'
>myCity.lower()
>'isparta'
#-should be-
>'?sparta'
Run Code Online (Sandbox Code Playgroud)

尝试了一些解码,(比如,myCity.decode("utf-8").lower())但是找不到怎么做.

怎么能降低这种字母?('我''''','İ'>'我'等)

编辑:在土耳其语中,'我'的小写是'ı'.'i'的大写是'İ'

unu*_*tbu 8

有些人建议使用tr_TR.utf8语言环境.至少在Ubuntu上,可能与此bug有关,设置此语言环境不会产生所需的结果:

import locale
locale.setlocale(locale.LC_ALL, 'tr_TR.utf8')

myCity = u'Isparta ?sparta'
print(myCity.lower())
# isparta isparta
Run Code Online (Sandbox Code Playgroud)

因此,如果此错误影响您,作为一种解决方法,您可以自己执行此转换:

lower_map = {
    ord(u'I'): u'?',
    ord(u'?'): u'i',
    }

myCity = u'Isparta ?sparta'
lowerCity = myCity.translate(lower_map)
print(lowerCity)
# ?sparta isparta
Run Code Online (Sandbox Code Playgroud)

版画

?sparta isparta
Run Code Online (Sandbox Code Playgroud)


gun*_*sus 6

您应该使用来自emre 解决方案的unicode 的新派生类

class unicode_tr(unicode):
    CHARMAP = {
        "to_upper": {
            u"?": u"I",
            u"i": u"?",
        },
        "to_lower": {
            u"I": u"?",
            u"?": u"i",
        }
    }

    def lower(self):
        for key, value in self.CHARMAP.get("to_lower").items():
            self = self.replace(key, value)
        return self.lower()

    def upper(self):
        for key, value in self.CHARMAP.get("to_upper").items():
            self = self.replace(key, value)
        return self.upper()

if __name__ == '__main__':
    print unicode_tr("kitap").upper()
    print unicode_tr("K?TAP").lower()
Run Code Online (Sandbox Code Playgroud)

K?TAP
kitap
Run Code Online (Sandbox Code Playgroud)

这必须解决您的问题。