有没有人知道有没有办法让SWIG将字符串编码为Python的UCS-4?SWIG文档指出,使用类型映射可以做到这一点,但没有提供任何其他细节或示例。
对于上下文,我正在使用一组Python脚本扩展Blender 3D软件。我们需要将这些脚本与各种机器人软件接口,我们使用SWIG编译Python库来实现这一点。Blender使用自己的Python 3.2和-- with -wide-unicode选项进行了预编译,因此它使用UCS-4 unicode字符串。然而,默认的SWIG将字符串编码为UCS-2,因此当我与Blender接口时,我总是会得到这样的错误:"undefined symbol: PyUnicodeUCS2_*“。
发布于 2012-01-09 15:42:52
这是来自SWIG文档的,也许你已经看过了:
目前,SWIG为
和宽字符字符串(C wchar_t类型)提供了有限的支持。一些语言为wchar_t提供了类型映射,但请记住,这些类型映射可能不能跨不同的操作系统移植。这是一个微妙的话题,许多程序员都很难理解,而且在不同的语言中没有以一致的方式实现。对于那些提供Unicode支持的脚本语言,Unicode字符串通常以8位表示形式提供,例如可以映射到char *类型的UTF-8 (在这种情况下,SWIG界面可能会工作)。如果您包装的程序使用Unicode,则不能保证目标语言中的Unicode字符将使用相同的内部表示(例如,UCS-2与UCS-4)。您可能需要编写一些特殊的转换函数。
因此,听起来您应该将它映射到char*,然后弄清楚如何在必要时手动转换它。听起来一开始就很混乱。
https://stackoverflow.com/questions/7090957
复制相似问题