【问题标题】:Are uppercase utf8 characters always the same number of bytes as their lowercase variants?大写 utf8 字符是否总是与其小写变体的字节数相同?
【发布时间】:2013-02-09 23:32:24
【问题描述】:

显然拉丁字母是这样。但我是在概念意义上问这个问题,跨语言和 Unicode 规范。

实际上这是为了比较两个字符串。如果您已经知道它们的字节数不同(在所有语言中),您能否认为足以保证它们不是同一字符串的不同“大小写”版本?

【问题讨论】:

  • 请注意,大写的 utf-8 字符串的 字符数 甚至可以与对应的小写字符不同:'ß' -> 'SS'

标签: unicode utf-8 case-insensitive


【解决方案1】:

没有。

考虑 U+0069 "i",它在 UTF-8 中具有八位字节值 69。在大写形式 U+0130 "İ" 中,此代码点形成 UTF-8 序列 C4 B0

强制说明:区分大小写。

【讨论】:

  • 我对 Unicode 和这方面的世界方式知之甚少。但是在大写/小写转换中丢失信息是典型/有效的吗?如果您不能唯一地来回转换,那么将这两种情况称为“相同字母的情况”是否公平?
  • 'i' 和 'I' 都是一个字节。但是 U+0130 是土耳其语的特殊大写字母 I。对那里的人来说,他们是“同一个字母的两个案例”。
  • @bmargulies 很高兴知道......那么,我想你必须仔细检查每个字符才能进行不区分大小写的比较。
  • @HostileFork 我推荐在大小写映射上使用Unicode FAQ - 和Unicode 规范的section 5.18 - 了解更多信息。
【解决方案2】:

Unicode 标准中没有任何原则或不变量可以保证这一点。我会特别关注重音大写字母,在这种情况下,不同情况下的预合成和非预合成之间可能存在不匹配。但是,我不能为你举一个问题的例子。

【讨论】:

    猜你喜欢
    • 2013-12-16
    • 2021-12-23
    • 1970-01-01
    • 2015-02-08
    • 2022-11-18
    • 1970-01-01
    • 2020-07-16
    • 2014-02-12
    • 1970-01-01
    相关资源
    最近更新 更多