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

标签 python google-app-engine unicode 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,然后再次解码,但有没有更直接/更有效的方法?

最佳答案

I know I can just encode it to UTF-8 and then decode again

是的,当您输入“UCS-4 字符串中的 UTF-16 代理项”时,这是解决问题的常用习惯用法。但正如 Mechanical snail 所说,此输入格式错误,您应该优先修复生成它的任何内容。

is there a more straightforward/efficient way?

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

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

当然不会更直接......我也怀疑它是否真的更有效率!

关于python - 如何在 Python 中获得可靠的 unicode 字符数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6922480/

相关文章:

python - 将宽字符转换为 python 字符串时可能发生内存泄漏

python - 将多个面板上的绘图标签安排在 matplotlib 中的一行中

python - 我无法使用 scrapy 上的规则获取数据

python - appcfg.py upload_data 在 Windows 上忽略 --oauth2 选项

performance - 如何快速从数据存储中检索多行数据?

google-app-engine - AppEngine 中任务队列的默认值是什么?

regex - 哪些字符可以用作正则表达式分隔符?

c++ - 如何在 C/C++ 中的 Windows 下对两个 Unicode 字符或字符串进行不区分大小写的比较?

Python 多处理类方法

java - 将 Java 字节数组转换为 Python 字节数组