我有一个带有单词列表的SQLite数据库。在一个表中,有一个单词列表,其中包含单词“você”。这个词在Unicode“voc \ U00ea”中具有这种表示形式。

我发现相同的单词可以具有以下表示以及相同的视觉输出:

"voc\U00ea",
"voce\U0302"

当我使用第二种表示形式查询数据库时,它返回空白。有谁知道使用两种表示方式进行查询而不复制表中记录的方式?

谢谢,
米格尔

最佳答案

这两种形式被称为nfc(正态形式组成)和nfd(“正态形式分解”)。字母\U0302被称为“组合回旋符”,它会修改前面的字母。

为了应对这种情况,请执行以下操作:

  • 选择规范化。通常选择nfc是个好主意。 (尽管iOS / OS X文件系统使用nfd。)
  • 在将字符串放入数据库之前,请始终进行规范化。在iOS中,您可以使用 precomposedStringWithCanonicalMapping precomosedStringWithCompatibilityMapping 。要了解规范映射和兼容性映射之间的区别,请参见this description
  • 在执行查询之前,请始终将查询规范化为相同的标准格式。
  • 09-12 07:07