【发布时间】:2011-10-18 20:17:36
【问题描述】:
Google App Engine 使用 Python 2.5.2,显然启用了 UCS4。但 GAE 数据存储在内部使用 UTF-8。因此,如果您将 u'\ud834\udd0c'(长度为 2)存储到数据存储区,当您检索它时,您会得到 '\U0001d10c'(长度为 1)。我试图以一种在存储之前和之后给出相同结果的方式来计算字符串中的 unicode 字符数。因此,在我收到字符串后,我会尝试对其进行标准化(从 u'\ud834\udd0c' 到 '\U0001d10c'),然后再计算其长度并将其放入数据存储区。我知道我可以将其编码为 UTF-8,然后再次解码,但有没有更直接/有效的方法?
【问题讨论】:
-
不要尝试存储
u'\ud834\udd0c'。代理不是有效的 unicode 代码点,因此您不应依赖它们保存在字符串中,或长度正常工作。 -
澄清一下:Python 中的
u'blah'在概念上表示一系列 Unicode 代码点。所以你不应该将 UTF-16 的二进制表示放入其中。 -
如果您从问题中删除了关于编码和解码的句子,并将其添加为答案,我可能会赞成,因为我认为这是最正确的事情去做得到你想要的。
标签: python google-app-engine unicode utf-16 utf-32