3

蟒蛇爱好者,

我正在尝试用 C 编写一个 Python 扩展,它将大量以空字符结尾的 UNICODE UTF-16 编码的 C 字符串传递给我的 Python 应用程序。我的 C 库中的 UNICODE 字符串保证始终为 16 位。由于 wchar_t 的大小可能会有所不同,因此我没有在 LINUX 上的 C 库中使用 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 位“引擎盖下”。

任何如何应对这一挑战的想法都受到高度赞赏。

谢谢,托马斯

4

1 回答 1

2

您无法避免复制数据(除非您突破 Python C API),但您可以直接从 UTF-16 数据创建 Python unicode 对象,使用PyUnicode_DecodeUTF16; 请参阅http://docs.python.org/c-api/unicode.html#utf-16-codecs

于 2012-04-06T08:11:09.100 回答