gpt4 book ai didi

Python C-API : How to pass an UNICODE UTF-16 null terminated C string to my python app without converting to UTF-8?

转载 作者:行者123 更新时间:2023-11-28 17:50:54 27 4
gpt4 key购买 nike

python 爱好者,

我正在尝试用 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) 说:

"Under the hood, Python represents Unicode strings as either 16- or 32-bit integers, depending on how the Python interpreter was compiled."

我真的很想避免仅出于 Python 接口(interface)目的将我所有的 UTF-16 C 字符串转换为 UTF-8 C 字符串的性能损失,特别是在 Windows 上,如果 Python 解释器“在后台”使用 16 位作为出色地。

非常感谢任何解决这一挑战的想法。

谢谢,托马斯

最佳答案

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

关于Python C-API : How to pass an UNICODE UTF-16 null terminated C string to my python app without converting to UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10040800/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com