如何使用python 2.7将字符串正确解析为字形集群?

时间:2016-09-30 17:49:27

标签: python python-2.7 python-3.x unicode

我试图找到一种方法,使用python 2.7.1将字符串解析为字形集群。例如,字符串:

details = u"Hello "

我认为应该解析为:

[u"H", u"e", u"l", u"l", u"o", u"\U0001f1e6\U0001f1f9", u"\U0001f1fb\U0001f1ea"]

我正在使用uniseg库中的grapheme_clusters,但这会产生:

[u"H", u"e", u"l", u"l", u"o", u"\U0001f1e6\U0001f1f9\U0001f1fb\U0001f1ea"]

我对使用2.7.1有严格的要求。我知道python 3.X中的Unicode支持更好。

  1. 我对这个字符串解析方式的解释是否正确?
  2. 有没有办法用python 2.7做到这一点?
  3. 这在python 3.X中实际上是否更容易?

1 个答案:

答案 0 :(得分:4)

此行为过去是正确的,但规则已更改。

从uniseg版本0.7.1开始(当前截至本文),uniseg文档引用了Unicode Standard Annex #29 Version 21中给出的Unicode字形集群边界规则的过时版本。此版本包含规则

  

不要在区域指标符号之间中断。

最新版本的Unicode字形集边界规则,Unicode Standard Annex #29 Version 29中提到

  

不要在表情符号标记序列中断开。也就是说,如果在断点之前存在奇数个RI字符,请不要在区域指示符(RI)符号之间中断。

您可以使用uniseg提交错误报告,也可以使用不同的库来实现更新的实施。 uniseg bitbucket页面链接到一些替代方案,例如PyICU