规范化unicode无法按预期工作

时间:2015-06-10 15:35:09

标签: python unicode special-characters normalize

我目前在特殊字符的不同unicode表示方面遇到了一些问题,尤其是带有重音符号或者diaereses的字符串表示等等。我写了一个python脚本,它解析多个数据库转储并比较它们之间的值。问题是,在不同的文件中,这些特殊字符的存储方式不同。在某些文件中,这些字符组成,在其他文件中被分解。由于我希望始终在组合表示中从转储中提取字符串,因此我尝试添加以下行:

value = unicodedata.normalize("NFC", value)

然而,这在某些情况下仅解决了我的问题。例如,对于变音符号,它按预期工作。然而,像ë这样的字符将保留在分解的模式中(e͏̈)。

我发现 e 和分音符之间有 COMBINING GRAPHEME JOINER - 字符(U + 034F)。这是正常的,还是这可能导致我的问题?

有人知道,如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

U+034F COMAPINING GRAPHEME JOINER的目的是确保某些序列在搜索/排序/规范化下保持不同。这是正确处理字符和组合标记所必需的,因为它们在某些语言中使用Unicode算法。从Unicode标准的section 23.2开始(第805页):

  

U + 034F结合字形连接器(CGJ)用于影响整理   为了语言敏感的校对而使用相邻字符   和搜索。它也用于区分可能的序列   否则在规范上等同。

     

...

     

反过来,这意味着在两个组合标记之间插入组合字形连接符将阻止规范化切换这两个组合标记的位置,而不管它们自己的组合类别。

一般情况下,你应该删除CGJ,而不必特别了解它为何首先插入。