【发布时间】:2011-09-05 19:04:48
【问题描述】:
使用PyMemberDef 声明中的T_STRING 定义,可以很简单地为基类型为char * 的Python C 扩展中的对象创建成员。
为什么似乎没有 wchar_t * 的等价物?如果真的有,那是什么?
例如
struct object 包含char *text
PyMemberDef 数组有{"text", T_STRING, offsetof(struct object, text), READONLY, "This is a normal character string."}
与类似的东西
struct object 包含wchar_t *wtext
PyMemberDef 数组有{"wtext", T_WSTRING, offsetof(struct object, wtext), READONLY, "This is a wide character string"}
我知道PyUnicode_AsString() 之类的东西及其相关方法可用于以 UTF-8 编码数据,将其存储在基本字符字符串中,然后再解码,但这样做需要包装通用 @ 987654334@ 和 setattr 方法/函数与那些解释编码文本的方法/函数,当您想要结构中固定元素大小的字符数组并且不想要可以存储的有效字符数时,它不是很有用它会有所不同。
【问题讨论】:
-
我不知道这是否回答了您的问题,但是:根据 Python 的编译方式,Py_UNICODE 可能是 wchar_t。 Python 可以为每个 unicode 字符(即 wchar)使用 2 个字节,也可以使用 4 个字节。因此 C 代码需要使用 PyUnicode_* 函数来处理 unicode 字符串,而无需假设它们存储的格式。
-
@Thomas:
wchar_t是两个或四个字节,具体取决于平台。
标签: python c unicode python-extensions