在Windows上识别宽泛的Unicode点窄Python构build

我有一个狭窄的Python 2.7.6在Windows上构build。 我也有一个包含“窄”(<0x10000)和“宽”(> 0xFFFF)Unicode代码点的string。

>>> wide1 = u'\U0002b740' >>> wide2 = u'\ud86d\udf40' >>> wide1 == wide2 True >>> narrow = u'\ud86d' >>> s = wide1 + narrow 

但是当我迭代string时,它不能识别宽码点:

 >>> for c in s: >>> c u'\ud86d' u'\udf40' u'\ud86d' 

而且不可能发现一个字符是一个窄码点还是一个宽码点的一部分。

Solutions Collecting From Web of "在Windows上识别宽泛的Unicode点窄Python构build"

你不能。 高Unicode代码点在内部表示为UTF-16代理。

U + D86D和U + DF40码点是这样的替代品,无论如何你都不应该在正常的Unicode文本中看到这个。 从维基百科的UTF-16文章引用:

Unicode标准会永久保留这些代码点值,以用于主导和备用代理的UTF-16编码,并且永远不会分配一个字符,因此应该没有理由对其进行编码。 官方的Unicode标准指出,包括UTF-16在内的任何UTF格式都不能对这些代码点进行编码。

因此,U + D800到U + DFFF码点不应被视为窄点; 他们是宽码点的一半,这是他们的目的。