毕多尼斯,
我正在尝试用C编写一个Python扩展,它将大量以null结尾的UNICODE UTF-16编码C字符串传递给我的Python应用程序。我的C库中的UNICODE字符串始终是16位。我没有在LINUX上的C库中使用wchar_t,因为wchar_t的大小可能有所不同。
我发现了许多函数(PyUnicode_AsUTF8String、PyString_FromStringAndSize、PyString_FromString等)。这完全符合我的要求,但所有这些函数都是为8位字符/字符串表示设计的。
Python (http://docs.python.org/howto/unicode.html)说:
“
”下,Python将Unicode字符串表示为16位整数或32位整数,这取决于编译Python解释器的方式。
我真的很想避免将我的所有UTF-16 C字符串转换为UTF-8 C字符串仅用于Python接口的性能损失,特别是在Windows上,如果Python解释器也使用16位“下盖”。
任何关于如何应对这一挑战的想法都会受到高度赞赏。
谢谢,托马斯
发布于 2012-04-06 08:11:09
您无法避免复制数据(除非您突破Python ),但是您可以使用PyUnicode_DecodeUTF16直接从UTF-16数据创建Python对象;参见http://docs.python.org/c-api/unicode.html#utf-16-codecs。
https://stackoverflow.com/questions/10040800
复制相似问题