我如何使用pywintypes.Unicode()?

时间:2015-07-08 10:57:21

标签: python windows python-3.x unicode

如何在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

seen其他code使用look对我来说是一样的,所以这里有什么问题?

1 个答案:

答案 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 2Python 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字符串。