On Fri, 2007-03-16 at 04:04 -0700, Yury wrote: > I am new to python and programming generally, but someday it is time > to start :) > I am writing a python module in C and have a question about multibyte > character strings in python<=>C. > I want a C function which takes a string as argument from python > script: > > static PyObject * > connect_to_server(PyObject *self, PyObject * authinfo){ > wchar_t * login; /* Must support unicode */ > char * serveraddr; > int * port; > > if(!PyArgsParseTuple(authinfo, "sdu", &serveraddr, &port, &login)) > return NULL; > > ... > > Will that code work? > Or i should use Py_UNICODE * data type? Will it be compatible with > standard C string comparison/concantenation functions?
You should familiarize yourself with the Python/C API documentation. It contains the answers to all the above questions. http://docs.python.org/api/arg-parsing.html says this about the "u" format character: "a pointer to the existing Unicode data is stored into the Py_UNICODE pointer variable whose address you pass." http://docs.python.org/api/unicodeObjects.html says this about Py_UNICODE: "On platforms where wchar_t is available and compatible with the chosen Python Unicode build variant, Py_UNICODE is a typedef alias for wchar_t to enhance native platform compatibility." The first quote says that, to be strictly correct, "login" should be a "Py_UNICODE*", but the second quote says that under the right circumstances, Py_UNICODE is the same as wchar_t. It's up to you to determine if your platform provides the right circumstances for this to be the case. Hope this helps, Carsten. -- http://mail.python.org/mailman/listinfo/python-list