如何在Python 3.3.5中使用pywintypes.Unicode
?
import pywintypes
pywintypes.Unicode("s")
这会产生错误:
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
pywintypes.Unicode("s")
TypeError: must be impossible<bad format char>, not str
答案 0 :(得分:2)
TL; DR:这是影响Python 3的错误,您在Python 3中不需要pywintypes.Unicode(text)
。只需直接使用text
如果你需要字符串,你需要一个字符串和bytes(text, encoding)
。
错误
TypeError: must be impossible<bad format char>, not str
提示C ++源代码中的错误格式char ,t#
,不可能(未知)。
感谢eryksun的评论,并查看PyArg_ParseTuple()
Python 2和Python 3的文档页面,很明显错误在于win32/src/PyWinTypesmodule.cpp
PYWINTYPES_EXPORT PyObject *PyWin_NewUnicode(PyObject *self, PyObject *args)
{
char *string;
int slen;
if (!PyArg_ParseTuple(args, "t#", &string, &slen)) // <-- BUG: Python 2 format char
return NULL;
return PyUnicode_DecodeMBCS(string, slen, NULL);
}
t#
仅适用于Python 2,对于Python 3,它应该类似于s*
,并且根据eryksun,MBCS解码是不必要的,因为Python已经自动处理Unicode字符串。