关于python:Unicode案例转换

Unicode case conversion

我被赋予了一个字符或一个字符串,并且正在使用python。

根据Unicode提出的标准(标准和特殊情况映射),如何确定特定字符是否具有小写等价物?

根据Unicode提出的标准(标准和特殊情况映射),如何确定字符串中是否有一个或多个字符具有小写等价物?


1
2
3
4
5
def haslower(unicodechar):
    return unicodechar != unicodechar.lower()

def anylower(unicodestring):
    return any(haslower(c) for c in unicodestring)

当然,这只能在您使用的Python版本按照Unicode标准正确实现.lower()方法时才能正常工作。另外,我假设您不认为,例如,u'a'具有"小写等价物"(当然,它是大写的)。如果你的意思不同,考虑一下

1
2
def changescase(uc):
    return uc != uc.lower() or uc != uc.upper()

(我已经将参数重命名为uc,以避免过多的行长度;-)——如果这是您想要的,我建议不要用"小写等价物"来命名函数,因为这样会混淆代码的读卡器/维护器!-)


@阿尔伯特,当你还没有弄清楚(也没有向回答者解释)你真正想做什么的时候,你似乎过于关注案例转换的细节。

===你以前解释的尝试(评论我对这个问题的回答)===

@约翰:嗯,我正在为我的网络服务制作一个API。我的WebService接受一个映射到我数据库中特定记录的键。该键区分大小写,可以由任何Unicode字符组成。因此,为了规范化所有输入,我将把所有键查询转换为小写(如果它们具有大写等价物)。这样做的结果是,当我创建记录键(我的用户可以自定义)时,我不能接受任何大写字符,这些字符可以通过tolower()函数转换为小写等效字符。所以我要做一个过滤器。有什么建议吗?

===和我的回复评论===

@阿尔伯特:如果你的钥匙是区分大小写的,你为什么要使它们正常化???""记录用户可以自定义的密钥"是什么意思???"任何Unicode字符"vs"都不能接受任何大写字符????从字面上回答你的问题:当c.lower()时,看起来你不能接受字符c!=c,这意味着如果key.lower()不能接受任何key!=密钥。我认为你应该开始一个新的问题,用例子准确地解释你想做什么。

…你当然问了一个新问题(事实上有两个),但你什么都没解释。这个"新"问题太新了,以至于@alex martelli的回答基本上与我上面强调的评论相同。

我认为你应该用新的内容开始一个新的问题,用例子确切地解释你想做什么。