Writing python module in C: wchar_t or Py_UNICODE?

Discussion in 'Python' started by Yury, Mar 16, 2007.

  1. Yury

    Yury Guest

    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?
     
    Yury, Mar 16, 2007
    #1
    1. Advertising

  2. 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.
     
    Carsten Haese, Mar 16, 2007
    #2
    1. Advertising

  3. Yury

    Yury Guest

    Carsten Haese wrote:
    >
    > 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.


    Thanks for reply,
    sorry for asking questions while not checked the manual.
    Also sorry for my wierd english :)
     
    Yury, Mar 17, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Adrian Cornish
    Replies:
    2
    Views:
    8,255
    Adrian Cornish
    Jul 12, 2003
  2. Bren
    Replies:
    4
    Views:
    4,193
    Peter van Merkerk
    Oct 7, 2003
  3. sorty
    Replies:
    4
    Views:
    20,830
    Rolf Magnus
    Nov 25, 2003
  4. Ames Andreas (MPA/DF)
    Replies:
    1
    Views:
    1,049
    Neil Hodgson
    Apr 27, 2004
  5. Replies:
    3
    Views:
    1,180
    James Kanze
    Aug 15, 2008
Loading...

Share This Page