如何在Python中获得可靠的unicode字符数?

Tra*_*vis 8 python unicode google-app-engine utf-16 utf-32

Google App Engine使用Python 2.5.2,显然启用了UCS4.但GAE数据存储区在内部使用UTF-8.所以,如果你存储U '\ ud834\udd0c'(长2)到数据存储,当你找回它,你会得到 '\ U0001d10c'(长度为1).我试图计算字符串中unicode字符的数量,以便在存储它之前和之后给出相同的结果.因此,在收到字符串之前,我会尝试将字符串规范化(从u'\ ud834\udd0c'到'\ U0001d10c'),然后再计算其长度并将其放入数据存储区.我知道我可以将其编码为UTF-8然后再次解码,但是有更简单/有效的方法吗?

bob*_*nce 4

\n

我知道我可以将其编码为 UTF-8,然后再次解码

\n
\n\n

是的,当 UCS-4 string\xe2\x80\x9d 输入中有 \xe2\x80\x9cUTF-16 代理时,这是解决问题的常用习惯用法。但正如 Mechanical snail 所说,这个输入格式错误,您应该优先修复产生它的任何内容。

\n\n
\n

有没有更直接/有效的方法?

\n
\n\n

嗯...您可以使用正则表达式手动完成,例如:

\n\n
re.sub(\n    u'([\\uD800-\\uDBFF])([\\uDC00-\\uDFFF])',\n    lambda m: unichr((ord(m.group(1))-0xD800<<10)+ord(m.group(2))-0xDC00+0x10000),\n    s\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

当然不是更简单...我也怀疑它是否真的更有效!

\n