According to my reading of the source, the function you have called expects an 8-bit string. ==== static PyObject * PyGetShortPathName(PyObject * self, PyObject * args) { char *path; if (!PyArg_ParseTuple(args, "s:GetShortPathName", &path)) ==== If it is given Unicode, PyArg_ParseTuple will attempt to encode it using the default encoding (ascii). Splat.
Looks like you need a GetShortPathNameW() but it's not implemented. Raise it as an issue on the pywin32 sourceforge bug register. Tell Mark I sent you :-) It may be possible to fake up your default encoding to say cp1252 BUT take the advice of anyone who screams "Don't do that!" and in any case this wouldn't help you with a Russian, Chinese, etc etc filename. Another thought: try using ctypes. Hope some of this helps, John -- http://mail.python.org/mailman/listinfo/python-list