Unicode案例转换

时间:2010-08-21 04:42:28

标签: python unicode case-sensitive

我使用的是单个字符或字符串,并使用Python。

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

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

2 个答案:

答案 0 :(得分:5)

def haslower(unicodechar):
    return unicodechar != unicodechar.lower()

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

这只会在您使用的Python版本正确实现每个unicode标准的.lower()方法时正常工作。另外,我假设您不考虑(例如u'a')“具有小写等效”(当然它有一个大写)。如果您的意思不同,请考虑

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

(我已将参数重命名为uc以避免过长行;-) - 如果这是您想要的,我建议根据“小写等效”命名函数“因为这肯定会使你的代码的读者/维护者感到困惑! - )

答案 1 :(得分:1)

@Albert,你似乎过分担心案件转换的细枝末节,当你还没有整理出来(也没有向回答者解释)你真正想要做什么。

===您之前的解释尝试(评论我对this question的回答)===

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

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

@Albert:如果您的密钥区分大小写,为什么要对它们进行规范化? “用户可以自定义的记录键”意味着什么? “任何unicode char”vs“不能接受任何大写字母”??? 从字面上回答你的问题:看起来你不能接受c.lower()!= c时的字符c,这意味着如果key.lower()!= key,你就不能接受任何键。我认为你应该开始一个新的问题,通过例子解释你正在尝试做什么。

...你肯定问了一个新问题(事实上其中有两个),但你没有解释任何问题。这个“新”问题是如此新鲜,以至于@Alex Martelli的答案与我上面强调的评论基本相同。

我认为你应该开始一个新的问题,使用新的内容,通过示例解释你正在尝试做什么。