使用UCS-4对Python进行Swig绑定

时间:2011-08-17 10:00:18

标签: python unicode swig

有没有人知道是否有办法让SWIG编码字符串为UCS-4 for Python? SWIG文档声明可以使用类型映射,但不提供任何其他详细信息或示例。

对于上下文,我正在使用一组Python脚本扩展Blender 3D软件。我们需要将这些脚本与各种机器人软件连接起来,我们使用SWIG来编译Python库。 Blender使用自己的Python 3.2预编译了--with-wide-unicode选项,因此它使用UCS-4 unicode字符串。 然而,通过defatult SWIG将字符串编码为UCS-2,因此当与Blender接口时,我总是会遇到错误:“undefined symbol:PyUnicodeUCS2 _ *”。

1 个答案:

答案 0 :(得分:1)

这是来自SWIG文档,也许您已经看过:

  

目前,SWIG对Unicode和宽字符串(C wchar_t类型)提供有限的支持。有些语言为wchar_t提供了类型映射,但请记住,这些语言可能无法在不同的操作系统中移植。这是一个微妙的主题,很多程序员都很难理解,而且没有跨语言以一致的方式实现。对于那些提供Unicode支持的脚本语言,Unicode字符串通常以8位表示形式提供,例如UTF-8,可以映射到char *类型(在这种情况下,SWIG接口可能会起作用)。如果要包装的程序使用Unicode,则无法保证目标语言中的Unicode字符将使用相同的内部表示(例如,UCS-2与UCS-4)。您可能需要编写一些特殊的转换函数。

所以听起来你应该把它映射到char *,然后弄清楚如何在必要时手动转换它。听起来好像从一开始就很混乱。