将代码点序列转换为Unicode字符串或从Unicode字符串转换为Unicode字符串

codepoints的Python项目详细描述


Python的Unicode代码点

在python 3.3之前,python运行时可以用以下两种unicode模式之一编译:

  1. sys.maxunicode == 0x10FFFF

    在这种模式下,python的unicode字符串支持从u+0000到u+10ffff的所有unicode代码点。一个代码点由一个字符串元素表示:

    >>> import sys
    >>> hex(sys.maxunicode)
    '0x10ffff'
    >>> len(u'\U0001F40D')
    1
    >>> [c for c in u'\U0001F40D']
    [u'\U0001f40d']
    

    这是Linux上Python2.7的默认设置,也是所有操作系统上Python3.3和更高版本的默认设置。

  2. sys.maxunicode == 0xFFFF

    在这种模式下,python的unicode字符串只支持从u+0000到u+ffff的unicode代码点范围。从u+10000到u+10ffff的任何代码点都使用utf-16编码中的一对字符串元素表示:

    >>> import sys
    >>> hex(sys.maxunicode)
    '0xffff'
    >>> len(u'\U0001F40D')
    2
    >>> [c for c in u'\U0001F40D']
    [u'\ud83d', u'\udc0d']
    

    这是MacOS和Windows上Python2.7的默认设置。

这种运行时差异使得编写python模块来将unicode字符串作为一系列代码点进行操作非常不方便。

代码点模块

此模块通过公开api来将unicode字符串转换为代码点列表和从代码点列表转换为unicode字符串来解决问题,而不考虑sys.maxunicode

>>> hex(sys.maxunicode)
'0xffff'
>>> snake = tuple(codepoints.from_unicode(u'\U0001F40D'))
>>> len(snake)
1
>>> snake[0]
128013
>> hex(snake[0])
'0x1f40d'
>>> codepoints.to_unicode(snake)
u'\U0001f40d'

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java调用Python函数作为TEID中的UDF   java Android。支持v4导入不工作   java如何影响具有静态属性的类   java如何在从glTexImage2D()分配后编辑纹理的像素颜色   javaspringboot+rediscache+@Cacheable适用于某些方法,而不适用于其他方法   java无法将动态Web模块方面从3.0更改为2.5   java如何在新选项卡中显示打印的文档?   java Google Cloud Endpoints API方法仅在删除用户参数时成功调用   java为什么我可以使用Stack<Double>但不能使用Stack<Double>?   java JDBC PreparedStatement似乎忽略了占位符   java如何设置JInternalFrame的标准图标化位置?   Java文件。copy()不复制文件   基于另一个类的java显示arraylist?   java Android Studio:错误:非法字符:'\u2028'   对象(Java)无法实例化类型映像?   javascript错误:飞行前响应的HTTP状态代码401无效   java确保泛型vararg参数具有相同的类型