【问题标题】:Python - isalpha() returns True on unicode modifiersPython - isalpha() 在 unicode 修饰符上返回 True
【发布时间】:2018-04-01 13:46:49
【问题描述】:

如果符号 ˇ 不是字母,为什么 u'\u02c7'.isalpha() 返回 True?此方法仅适用于 ASCII 字符吗?

【问题讨论】:

  • 字母,根据 Unicode 标准。
  • 谢谢,你是对的,想通了

标签: python unicode python-unicode


【解决方案1】:

U+02c7 CARONLm (Modifier Letter) category 中的一个代码点,所以根据 Unicode 标准,它是字母。

str.isalpha() 的文档清楚地说明了包含的内容:

字母字符是在 Unicode 字符数据库中定义为“字母”的字符,即一般类别属性为“Lm”、“Lt”、“Lu”、“Ll”或“Lo”之一的字符。 )

您没有定义正常工作的含义;显然,您对字母的构成有不同的定义。如果您只期望 Latin-1 字母,那么您需要限制还需要测试字符串是否可以安全地编码为 Latin-1。在 Unicode 的 Latin-1 子集中恰好有零个 Lm 类别代码点(也没有 Lt 字符,只有 2 个 Lo 字符,ª (U+00AA) 和 º (U+00BA))。

【讨论】:

  • 是的,我没有看到修饰符也是字母,虽然我觉得有点奇怪。期望将 ASCII 字母或最多带有变音符号等的 unicode 字母定义为“字母字母”
  • @Kostya:那时你才想到拉丁字母 1。
  • @Kostya:(有拉丁衍生的 Lm 代码点,但它们位于 02B0 - 02B8 范围内,超出 Unicode 标准的 ISO-8859-1 / Latin-1 范围,甚至更远) )。
  • 原因:你想检查一个字符串是否是一个单词(由字母字符组成)。修饰符只是修饰这些字符,但结果仍然是一个(重音)单词。注意:只是一个组合字符不是有效的 unicode 字符串,所以你不应该遇到这种极端情况。
  • @GiacomoCatenazzi:这些是不组合字符。恰好有零个代码点都是字母(类别L*)并且具有非0的组合类(因此它们修改其他字符)。组合字符是总是 标记(类别M*组合标记),绝不是任何其他类别。见D52 in Chapter 3.6 of the Unicode comformance section
猜你喜欢
  • 2021-07-04
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多