Problems in Using C-API for Unicode handling

2009-01-12 Thread abhi
Hi,
I am trying to handle Unicode objects in C (Python 2.5.2). I am
getting PyObjects from and want to coerce them to unicode objects. The
documentation provides two APIs for that:

 PyUnicode_FromEncodedObject(PyObject *obj, const char *encoding,
const char *errors)
 PyUnicode_FromObject(PyObject *obj)

(http://www.python.org/doc/2.5.2/api/unicodeObjects.html)
Now I want to utf-16 so I am trying to use the first one, but it is
giving back NULL in case of PyObject is already Unicode type which is
expected. What puzzles me is that PyUnicode_FromObject(PyObject *obj)
is passing irrespective of type of PyObject. The API says it is
Shortcut for PyUnicode_FromEncodedObject(obj, NULL, "strict") but if I
use that, it returns NULL where as PyUnicode_FromObject works.

Is there any way by which I can take in any PyObject and convert it to
utf-16 object? Any help is appreciated.

Thanks,
Abhigyan
--
http://mail.python.org/mailman/listinfo/python-list


Re: Problems in Using C-API for Unicode handling

2009-01-13 Thread abhi
On Jan 13, 12:17 pm, Terry Reedy  wrote:
> abhi wrote:
> > Hi,
> >     I am trying to handle Unicode objects in C (Python 2.5.2). I am
> > getting PyObjects from and want to coerce them to unicode objects. The
> > documentation provides two APIs for that:
>
> >  PyUnicode_FromEncodedObject(PyObject *obj, const char *encoding,
> > const char *errors)
> >  PyUnicode_FromObject(PyObject *obj)
>
> > (http://www.python.org/doc/2.5.2/api/unicodeObjects.html)
> > Now I want to utf-16 so I am trying to use the first one, but it is
> > giving back NULL in case of PyObject is already Unicode type which is
> > expected. What puzzles me is that PyUnicode_FromObject(PyObject *obj)
> > is passing irrespective of type of PyObject. The API says it is
> > Shortcut for PyUnicode_FromEncodedObject(obj, NULL, "strict") but if I
> > use that, it returns NULL where as PyUnicode_FromObject works.
>
> > Is there any way by which I can take in any PyObject and convert it to
> > utf-16 object? Any help is appreciated.
>
> Whether Unicode objects are utf-16 or utf=32 depends on your Python
> build.  You can always convert a byte string representation of an object
> to unicode.- Hide quoted text -
>
> - Show quoted text -

Hi,
   I agree with you. I have a Python unicode object in C (I don't know
which utf) and I want to convert this explicitely to utf-16. Is there
any way to do this?
PyUnicode_FromEncodedObject(PyObject *obj, const char *encoding, const
char *errors) says that obj can't be a unicode type so I guess I can't
use this one, does anybody knows any other method by which I can
achieve my goal?

Thanks,
Abhigyan
--
http://mail.python.org/mailman/listinfo/python-list


Unicode problem in ucs4

2009-03-19 Thread abhi
Hi,
I have a C extension, which takes a unicode or string value from
python and convert it to unicode before doing more operations on it.
The skeleton looks like:

static PyObject *unicode_helper( PyObject *self, PyObject *args){
  PyObject *sampleObj = NULL;
  Py_UNICODE *sample = NULL;

  if (!PyArg_ParseTuple(args, "O", &sampleObj)){
return NULL;
  }
  // Explicitly convert it to unicode and get Py_UNICODE value
  sampleObj = PyUnicode_FromObject(sampleObj);
  sample = PyUnicode_AS_UNICODE(sampleObj);
   
  // perform other operations.
   .
}

This piece of code is working fine on python with ucs2 configuration
but fails with python ucs4 config. By failing, I mean that only the
first letter comes in variable sample i.e. if I pass "test" from
python then sample will contain only "t". However, PyUnicode_GetSize
(sampleObj) function is returning correct value (4 in this case).

Any idea on why this is happening? Any help will be appreciated.

Regards,
Abhigyan
--
http://mail.python.org/mailman/listinfo/python-list


Re: Unicode problem in ucs4

2009-03-20 Thread abhi
On Mar 20, 11:03 am, "Martin v. Löwis"  wrote:
> > Any idea on why this is happening?
>
> Can you provide a complete example? Your code looks correct, and should
> just work.
>
> How do you know the result contains only 't' (i.e. how do you know it
> does not contain 'e', 's', 't')?
>
> Regards,
> Martin

Hi Martin,
 Here is the code:
unicodeTest.c

#include

static PyObject *unicode_helper(PyObject *self,PyObject *args){
PyObject *sampleObj = NULL;
Py_UNICODE *sample = NULL;

  if (!PyArg_ParseTuple(args, "O", &sampleObj)){
return NULL;
  }

 // Explicitly convert it to unicode and get Py_UNICODE value
  sampleObj = PyUnicode_FromObject(sampleObj);
  sample = PyUnicode_AS_UNICODE(sampleObj);
  wprintf(L"database value after unicode conversion is : %s\n",
sample);
  return Py_BuildValue("");
}

static PyMethodDef funcs[]={{"unicodeTest",(PyCFunction)
unicode_helper,METH_VARARGS,"test ucs2, ucs4"},{NULL}};

void initunicodeTest(void){
Py_InitModule3("unicodeTest",funcs,"");
}

When i install this unicodeTest on python ucs2 wprintf prints whatever
is passed eg

import unicodeTest
unicodeTest.unicodeTest("hello world")
database value after unicode conversion is : hello world

but it prints the following on ucs4 configured python:
database value after unicode conversion is : h

Regards,
Abhigyan
--
http://mail.python.org/mailman/listinfo/python-list


Re: Unicode problem in ucs4

2009-03-23 Thread abhi
On Mar 20, 5:47 pm, "M.-A. Lemburg"  wrote:
> On 2009-03-20 12:13, abhi wrote:
>
>
>
>
>
> > On Mar 20, 11:03 am, "Martin v. Löwis"  wrote:
> >>> Any idea on why this is happening?
> >> Can you provide a complete example? Your code looks correct, and should
> >> just work.
>
> >> How do you know the result contains only 't' (i.e. how do you know it
> >> does not contain 'e', 's', 't')?
>
> >> Regards,
> >> Martin
>
> > Hi Martin,
> >  Here is the code:
> > unicodeTest.c
>
> > #include
>
> > static PyObject *unicode_helper(PyObject *self,PyObject *args){
> >    PyObject *sampleObj = NULL;
> >            Py_UNICODE *sample = NULL;
>
> >       if (!PyArg_ParseTuple(args, "O", &sampleObj)){
> >                 return NULL;
> >       }
>
> >     // Explicitly convert it to unicode and get Py_UNICODE value
> >       sampleObj = PyUnicode_FromObject(sampleObj);
> >       sample = PyUnicode_AS_UNICODE(sampleObj);
> >       wprintf(L"database value after unicode conversion is : %s\n",
> > sample);
>
> You have to use PyUnicode_AsWideChar() to convert a Python
> Unicode object to a wchar_t representation.
>
> Please don't make any assumptions on what Py_UNICODE maps
> to and always use the the Unicode API for this. It is designed
> to provide a portable interface and will not do more conversion
> work than necessary.
>
>
>
>
>
> >       return Py_BuildValue("");
> > }
>
> > static PyMethodDef funcs[]={{"unicodeTest",(PyCFunction)
> > unicode_helper,METH_VARARGS,"test ucs2, ucs4"},{NULL}};
>
> > void initunicodeTest(void){
> >    Py_InitModule3("unicodeTest",funcs,"");
> > }
>
> > When i install this unicodeTest on python ucs2 wprintf prints whatever
> > is passed eg
>
> > import unicodeTest
> > unicodeTest.unicodeTest("hello world")
> > database value after unicode conversion is : hello world
>
> > but it prints the following on ucs4 configured python:
> > database value after unicode conversion is : h
>
> > Regards,
> > Abhigyan
> > --
> >http://mail.python.org/mailman/listinfo/python-list
>
> --
> Marc-Andre Lemburg
> eGenix.com
>
> Professional Python Services directly from the Source  (#1, Mar 20 2009)>>> 
> Python/Zope Consulting and Support ...        http://www.egenix.com/
> >>> mxODBC.Zope.Database.Adapter ...            http://zope.egenix.com/
> >>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
>
> 
>
> ::: Try our new mxODBC.Connect Python Database Interface for free ! 
>
>    eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
>     D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
>            Registered at Amtsgericht Duesseldorf: HRB 46611
>                http://www.egenix.com/company/contact/- Hide quoted text -
>
> - Show quoted text -- Hide quoted text -
>
> - Show quoted text -

Hi Mark,
 Thanks for the help. I tried PyUnicode_AsWideChar() but I am
getting the same result i.e. only the first letter.

sample code:

#include

static PyObject *unicode_helper(PyObject *self,PyObject *args){
PyObject *sampleObj = NULL;
wchar_t *sample = NULL;
int size = 0;

  if (!PyArg_ParseTuple(args, "O", &sampleObj)){
return NULL;
  }

 // use wide char function
  size = PyUnicode_AsWideChar(databaseObj, sample,
PyUnicode_GetSize(databaseObj));
  printf("%d chars are copied to sample\n", size);
  wprintf(L"database value after unicode conversion is : %s\n",
sample);
  return Py_BuildValue("");

}


static PyMethodDef funcs[]={{"unicodeTest",(PyCFunction)
unicode_helper,METH_VARARGS,"test ucs2, ucs4"},{NULL}};

void initunicodeTest(void){
Py_InitModule3("unicodeTest",funcs,"");

}

This prints the following when input value is given as "test":
4 chars are copied to sample
database value after unicode conversion is : t

Any ideas?

-
Abhigyan
--
http://mail.python.org/mailman/listinfo/python-list


Re: Unicode problem in ucs4

2009-03-23 Thread abhi
On Mar 23, 3:04 pm, "M.-A. Lemburg"  wrote:
> On 2009-03-23 08:18, abhi wrote:
>
>
>
> > On Mar 20, 5:47 pm, "M.-A. Lemburg"  wrote:
> >>> unicodeTest.c
> >>> #include
> >>> static PyObject *unicode_helper(PyObject *self,PyObject *args){
> >>>    PyObject *sampleObj = NULL;
> >>>            Py_UNICODE *sample = NULL;
> >>>       if (!PyArg_ParseTuple(args, "O", &sampleObj)){
> >>>                 return NULL;
> >>>       }
> >>>     // Explicitly convert it to unicode and get Py_UNICODE value
> >>>       sampleObj = PyUnicode_FromObject(sampleObj);
> >>>       sample = PyUnicode_AS_UNICODE(sampleObj);
> >>>       wprintf(L"database value after unicode conversion is : %s\n",
> >>> sample);
> >> You have to use PyUnicode_AsWideChar() to convert a Python
> >> Unicode object to a wchar_t representation.
>
> >> Please don't make any assumptions on what Py_UNICODE maps
> >> to and always use the the Unicode API for this. It is designed
> >> to provide a portable interface and will not do more conversion
> >> work than necessary.
>
> > Hi Mark,
> >      Thanks for the help. I tried PyUnicode_AsWideChar() but I am
> > getting the same result i.e. only the first letter.
>
> > sample code:
>
> > #include
>
> > static PyObject *unicode_helper(PyObject *self,PyObject *args){
> >         PyObject *sampleObj = NULL;
> >         wchar_t *sample = NULL;
> >         int size = 0;
>
> >       if (!PyArg_ParseTuple(args, "O", &sampleObj)){
> >                 return NULL;
> >       }
>
> >          // use wide char function
> >       size = PyUnicode_AsWideChar(databaseObj, sample,
> > PyUnicode_GetSize(databaseObj));
>
> The 3. argument is the buffer size in bytes, not code points.
> The result will require sizeof(wchar_t) * PyUnicode_GetSize(databaseObj)
> bytes without a trailing NUL, otherwise sizeof(wchar_t) *
> (PyUnicode_GetSize(databaseObj) + 1).
>
> You also have to allocate the buffer to store the wchar_t data in.
> Passing in a NULL pointer will result in a seg fault. The function
> does not allocate a buffer for you:
>
> /* Copies the Unicode Object contents into the wchar_t buffer w.  At
>    most size wchar_t characters are copied.
>
>    Note that the resulting wchar_t string may or may not be
>    0-terminated.  It is the responsibility of the caller to make sure
>    that the wchar_t string is 0-terminated in case this is required by
>    the application.
>
>    Returns the number of wchar_t characters copied (excluding a
>    possibly trailing 0-termination character) or -1 in case of an
>    error. */
>
> PyAPI_FUNC(Py_ssize_t) PyUnicode_AsWideChar(
>     PyUnicodeObject *unicode,   /* Unicode object */
>     register wchar_t *w,        /* wchar_t buffer */
>     Py_ssize_t size             /* size of buffer */
>     );
>
>
>
> >       printf("%d chars are copied to sample\n", size);
> >       wprintf(L"database value after unicode conversion is : %s\n",
> > sample);
> >       return Py_BuildValue("");
>
> > }
>
> > static PyMethodDef funcs[]={{"unicodeTest",(PyCFunction)
> > unicode_helper,METH_VARARGS,"test ucs2, ucs4"},{NULL}};
>
> > void initunicodeTest(void){
> >         Py_InitModule3("unicodeTest",funcs,"");
>
> > }
>
> > This prints the following when input value is given as "test":
> > 4 chars are copied to sample
> > database value after unicode conversion is : t
>
> > Any ideas?
>
> > -
> > Abhigyan
> > --
> >http://mail.python.org/mailman/listinfo/python-list
>
> --
> Marc-Andre Lemburg
> eGenix.com
>
> Professional Python Services directly from the Source  (#1, Mar 23 2009)>>> 
> Python/Zope Consulting and Support ...        http://www.egenix.com/
> >>> mxODBC.Zope.Database.Adapter ...            http://zope.egenix.com/
> >>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
>
> 
> 2009-03-19: Released mxODBC.Connect 1.0.1      http://python.egenix.com/
>
> ::: Try our new mxODBC.Connect Python Database Interface for free ! 
>
>    eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
>     D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
>            Registered at Amtsgericht Duesseldorf: HRB 46611
>  

Re: Unicode problem in ucs4

2009-03-23 Thread abhi
On Mar 23, 4:37 pm, "M.-A. Lemburg"  wrote:
> On 2009-03-23 11:50, abhi wrote:
>
>
>
> > On Mar 23, 3:04 pm, "M.-A. Lemburg"  wrote:
> > Thanks Marc, John,
> >          With your help, I am at least somewhere. I re-wrote the code
> > to compare Py_Unicode and wchar_t outputs and they both look exactly
> > the same.
>
> > #include
>
> > static PyObject *unicode_helper(PyObject *self,PyObject *args){
> >    const char *name;
> >    PyObject *sampleObj = NULL;
> >            Py_UNICODE *sample = NULL;
> >    wchar_t * w=NULL;
> >    int size = 0;
> >    int i;
>
> >       if (!PyArg_ParseTuple(args, "O", &sampleObj)){
> >                 return NULL;
> >       }
>
> >         // Explicitly convert it to unicode and get Py_UNICODE value
> >         sampleObj = PyUnicode_FromObject(sampleObj);
> >         sample = PyUnicode_AS_UNICODE(sampleObj);
> >         printf("size of sampleObj is : %d\n",PyUnicode_GET_SIZE
> > (sampleObj));
> >         w = (wchar_t *) malloc((PyUnicode_GET_SIZE(sampleObj)+1)*sizeof
> > (wchar_t));
> >    size = PyUnicode_AsWideChar(sampleObj,w,(PyUnicode_GET_SIZE(sampleObj)
> > +1)*sizeof(wchar_t));
> >    printf("%d chars are copied to w\n",size);
> >    printf("size of wchar_t is : %d\n", sizeof(wchar_t));
> >    printf("size of Py_UNICODE is: %d\n",sizeof(Py_UNICODE));
> >    for(i=0;i >            printf("sample is : %c\n",sample[i]);
> >            printf("w is : %c\n",w[i]);
> >    }
> >    return sampleObj;
> > }
>
> > static PyMethodDef funcs[]={{"unicodeTest",(PyCFunction)
> > unicode_helper,METH_VARARGS,"test ucs2, ucs4"},{NULL}};
>
> > void initunicodeTest(void){
> >    Py_InitModule3("unicodeTest",funcs,"");
> > }
>
> > This gives the following output when I pass "abc" as input:
>
> > size of sampleObj is : 3
> > 3 chars are copied to w
> > size of wchar_t is : 4
> > size of Py_UNICODE is: 4
> > sample is : a
> > w is : a
> > sample is : b
> > w is : b
> > sample is : c
> > w is : c
>
> > So, both Py_UNICODE and wchar_t are 4 bytes and since it contains 3
> > \0s after a char, printf or wprintf is only printing one letter.
> > I need to further process the data and those libraries will need the
> > data in UCS2 format (2 bytes), otherwise they fail. Is there any way
> > by which I can force wchar_t to be 2 bytes, or can I convert this UCS4
> > data to UCS2 explicitly?
>
> Sure: just use the appropriate UTF-16 codec for this.
>
> /* Generic codec based encoding API.
>
>    object is passed through the encoder function found for the given
>    encoding using the error handling method defined by errors. errors
>    may be NULL to use the default method defined for the codec.
>
>    Raises a LookupError in case no encoder can be found.
>
>  */
>
> PyAPI_FUNC(PyObject *) PyCodec_Encode(
>        PyObject *object,
>        const char *encoding,
>        const char *errors
>        );
>
> encoding needs to be set to 'utf-16-le' for little endian, 'utf-16-be'
> for big endian.
>
> --
> Marc-Andre Lemburg
> eGenix.com
>
> Professional Python Services directly from the Source  (#1, Mar 23 2009)>>> 
> Python/Zope Consulting and Support ...        http://www.egenix.com/
> >>> mxODBC.Zope.Database.Adapter ...            http://zope.egenix.com/
> >>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
>
> 
> 2009-03-19: Released mxODBC.Connect 1.0.1      http://python.egenix.com/
>
> ::: Try our new mxODBC.Connect Python Database Interface for free ! 
>
>    eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
>     D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
>            Registered at Amtsgericht Duesseldorf: HRB 46611
>                http://www.egenix.com/company/contact/

Thanks, but this is returning PyObject *, whereas I need value in some
variable which can be printed using wprintf() like wchar_t (having a
size of 2 bytes). If I again convert this PyObject to wchar_t or
PyUnicode, I go back to where I started. :)

-
Abhigyan
--
http://mail.python.org/mailman/listinfo/python-list


Re: Unicode problem in ucs4

2009-03-23 Thread abhi
On Mar 23, 4:57 pm, abhi  wrote:
> On Mar 23, 4:37 pm, "M.-A. Lemburg"  wrote:
>
>
>
> > On 2009-03-23 11:50, abhi wrote:
>
> > > On Mar 23, 3:04 pm, "M.-A. Lemburg"  wrote:
> > > Thanks Marc, John,
> > >          With your help, I am at least somewhere. I re-wrote the code
> > > to compare Py_Unicode and wchar_t outputs and they both look exactly
> > > the same.
>
> > > #include
>
> > > static PyObject *unicode_helper(PyObject *self,PyObject *args){
> > >    const char *name;
> > >    PyObject *sampleObj = NULL;
> > >            Py_UNICODE *sample = NULL;
> > >    wchar_t * w=NULL;
> > >    int size = 0;
> > >    int i;
>
> > >       if (!PyArg_ParseTuple(args, "O", &sampleObj)){
> > >                 return NULL;
> > >       }
>
> > >         // Explicitly convert it to unicode and get Py_UNICODE value
> > >         sampleObj = PyUnicode_FromObject(sampleObj);
> > >         sample = PyUnicode_AS_UNICODE(sampleObj);
> > >         printf("size of sampleObj is : %d\n",PyUnicode_GET_SIZE
> > > (sampleObj));
> > >         w = (wchar_t *) malloc((PyUnicode_GET_SIZE(sampleObj)+1)*sizeof
> > > (wchar_t));
> > >    size = PyUnicode_AsWideChar(sampleObj,w,(PyUnicode_GET_SIZE(sampleObj)
> > > +1)*sizeof(wchar_t));
> > >    printf("%d chars are copied to w\n",size);
> > >    printf("size of wchar_t is : %d\n", sizeof(wchar_t));
> > >    printf("size of Py_UNICODE is: %d\n",sizeof(Py_UNICODE));
> > >    for(i=0;i > >            printf("sample is : %c\n",sample[i]);
> > >            printf("w is : %c\n",w[i]);
> > >    }
> > >    return sampleObj;
> > > }
>
> > > static PyMethodDef funcs[]={{"unicodeTest",(PyCFunction)
> > > unicode_helper,METH_VARARGS,"test ucs2, ucs4"},{NULL}};
>
> > > void initunicodeTest(void){
> > >    Py_InitModule3("unicodeTest",funcs,"");
> > > }
>
> > > This gives the following output when I pass "abc" as input:
>
> > > size of sampleObj is : 3
> > > 3 chars are copied to w
> > > size of wchar_t is : 4
> > > size of Py_UNICODE is: 4
> > > sample is : a
> > > w is : a
> > > sample is : b
> > > w is : b
> > > sample is : c
> > > w is : c
>
> > > So, both Py_UNICODE and wchar_t are 4 bytes and since it contains 3
> > > \0s after a char, printf or wprintf is only printing one letter.
> > > I need to further process the data and those libraries will need the
> > > data in UCS2 format (2 bytes), otherwise they fail. Is there any way
> > > by which I can force wchar_t to be 2 bytes, or can I convert this UCS4
> > > data to UCS2 explicitly?
>
> > Sure: just use the appropriate UTF-16 codec for this.
>
> > /* Generic codec based encoding API.
>
> >    object is passed through the encoder function found for the given
> >    encoding using the error handling method defined by errors. errors
> >    may be NULL to use the default method defined for the codec.
>
> >    Raises a LookupError in case no encoder can be found.
>
> >  */
>
> > PyAPI_FUNC(PyObject *) PyCodec_Encode(
> >        PyObject *object,
> >        const char *encoding,
> >        const char *errors
> >        );
>
> > encoding needs to be set to 'utf-16-le' for little endian, 'utf-16-be'
> > for big endian.
>
> > --
> > Marc-Andre Lemburg
> > eGenix.com
>
> > Professional Python Services directly from the Source  (#1, Mar 23 2009)>>> 
> > Python/Zope Consulting and Support ...        http://www.egenix.com/
> > >>> mxODBC.Zope.Database.Adapter ...            http://zope.egenix.com/
> > >>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
>
> > 
> > 2009-03-19: Released mxODBC.Connect 1.0.1      http://python.egenix.com/
>
> > ::: Try our new mxODBC.Connect Python Database Interface for free ! 
>
> >    eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
> >     D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
> >            Registered at Amtsgericht Duesseldorf: HRB 46611
> >                http://www.egenix.com/company/contact/
>
> Thanks, but this is returning PyObject *, whereas I need value in some
> variable which can be printed using wprintf() like wchar_t (having a
> size of 2 bytes). If I again convert this PyObject to wchar_t or
> PyUnicode, I go back to where I started. :)
>
> -
> Abhigyan

Hi Marc,
   Is there any way to ensure that wchar_t size would always be 2
instead of 4 in ucs4 configured python? Googling gave me the
impression that there is some logic written in PyUnicode_AsWideChar()
which can take care of ucs4 to ucs2 conversion if sizes of Py_UNICODE
and wchar_t are different.

-
Abhigyan
--
http://mail.python.org/mailman/listinfo/python-list


Re: Unicode problem in ucs4

2009-03-25 Thread abhi
On Mar 24, 4:55 am, "Martin v. Löwis"  wrote:
> > So, both Py_UNICODE and wchar_t are 4 bytes and since it contains 3
> > \0s after a char, printf or wprintf is only printing one letter.
>
> No. printf indeed will see a terminating character. However, wprintf
> should correctly know that a wchar_t has four bytes per character,
> and print it correctly. Make sure to use %ls to print wchar_t arrays;
> %s would print multi-byte character strings.
>
> > I need to further process the data and those libraries will need the
> > data in UCS2 format (2 bytes), otherwise they fail.
>
> Are you absolutely sure about that? Why does that library expect
> UCS-2, when you system's wchar_t is four bytes?
>
> In any case, do what MAL told you: use the UCS-2 codec to convert
> the Unicode string to a 2-bytes-per-char byte string. The PyObject
> you get from the conversion is a byte string object; use
> PyString_AsStringAndSize to get to the actual bytes.
>
> Regards,
> Martin

Thanks Marc and Martin, my preliminary trials are showing positive
results with this method.

-
Abhigyan
--
http://mail.python.org/mailman/listinfo/python-list


Problem in PyArg_ParseTuple on python 2.5.2 with AIX

2009-07-27 Thread abhi
Hi,
I am facing a problem using PyArg_ParseTuple() in my C-API
extension. Here is a small repro of the function:

static PyObject *parsetuple_test(PyObject *self, PyObject *args)
{
SQLUSMALLINT param_no = 0;
PyObject *py_obj = NULL;

if (!PyArg_ParseTuple(args, "Oi", &py_obj, ¶m_no)){

return NULL;
}
printf("%d\n", param_no);
return NULL;
}

This function works fine and prints the correct value passed
(param_no) when I test it on Linux or Windows. However, it always
prints 0 (initial value defined in function) when I run it on AIX.

I think the problem is with "Oi" argument, if I replace that with "OO"
and specifically convert it integer/sqlsmallint. It works fine on AIX,
but I want to use "i" and not "O".

Any ideas on what is the reason behind the problem and how to fix
this?

Thanks,
Abhigyan
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Problem in PyArg_ParseTuple on python 2.5.2 with AIX

2009-07-27 Thread abhi
On Jul 27, 2:25 pm, John Machin  wrote:
> On Jul 27, 5:11 pm, abhi  wrote:
>
> > Hi,
> >     I am facing a problem using PyArg_ParseTuple() in my C-API
> > extension. Here is a small repro of the function:
>
> > static PyObject *parsetuple_test(PyObject *self, PyObject *args)
> > {
> >         SQLUSMALLINT param_no = 0;
>
> Sorry, my crystal ball is on the fritz. What is SQLUSMALLINT on
> Windows/Linux/AIX?
> What does
>     printf("%d %d %d\n", sizeof(SQLUSMALLINT), sizeof(int), sizeof
> (long));
> give you on each platform?
>
> >         PyObject *py_obj = NULL;
>
> >         if (!PyArg_ParseTuple(args, "Oi", &py_obj, ¶m_no)){
>
> >                 return NULL;
> >         }
> >         printf("%d\n", param_no);
> >         return NULL;
>
> > }
>
> > This function works fine and prints the correct value passed
> > (param_no) when I test it on Linux or Windows. However, it always
> > prints 0 (initial value defined in function) when I run it on AIX.
>
> Consider that 0 could have been plucked out of the air and has nothing
> to do with the initial value of param_no. Try initialising it to
> something distinctive, like 0xfedcba98. Use %08x format in the printf
> rather than %d.
>
>
>
> > I think the problem is with "Oi" argument, if I replace that with "OO"
> > and specifically convert it integer/sqlsmallint. It works fine on AIX,
> > but I want to use "i" and not "O".
>
> > Any ideas on what is the reason behind the problem and how to fix
> > this?
>
> I jump-started the crystal ball from the over-head tram wire and saw
> this: """SQLSMALLINT is 16 bits on all platforms, int/long is 32 bits
> on all platforms, first 2 are little-endian, AIX is bigendian, the "i"
> format expects SIGNED int /long, so param_no is getting (win:x,
> linux:x, aix:0) and the next 16 bits in memory are getting trashed
> with (win:0, linux:0, aix:x) (when x is your input smallish integer)
> and luckily this trashing didn't cause a crash. You can receive the
> result from the function in an int/long then have code to reject it if
> it won't fit into a SQLUSMALLINT, and cast it otherwise. If you don't
> care about overflow (NOT recommended), just use "H" format instead if
> "i" format"""
>
> Could be wrong, really shouldn't subject precision instruments to 415V
> DC, only OPs :-)
>
> N.B. to detect endianness : use print sys.byteorder
>
> HTH,
> John

Hi,
Thanks for the response. If I don't use SQLUSMALLINT and use int
instead, then also I see the same problem.
static PyObject *parsetuple_test(PyObject *self, PyObject *args)
 {
int param_no = 0;


}
This also prints out 0 for AIX and actual value passed in other
platforms. If I initialize param_no with some other value (e.g. 90),
it prints out that value.

-
Abhigyan
-- 
http://mail.python.org/mailman/listinfo/python-list


RE: Issue in installing python

2021-10-16 Thread Abhi R
   Hello

   Welcome to the Python Mailing List.

   Images will not get rendered on a Mailing List.

   Can you please copy- paste the error you're seeing as text?





   Regards

   [1]Abhiram





   Sent from [2]Mail for Windows



   From: [3]Kaviya Vadivel
   Sent: 17 October 2021 01:16
   To: [4]python-list@python.org
   Subject: Fwd: Issue in installing python



   -- Forwarded message -

   From: Kaviya Vadivel 

   Date: Sat, 16 Oct 2021 at 17:00

   Subject: Issue in installing python

   To: 





   Hello Team,



   I have downloaded python 3.10.0 from python.org.I have windows 8.1.I have

   installed the python on my machine .But during installation Im getting

   application error.It doesn't install on my machine.But Im getting

   successful after the installation completes.PF the attached

   screenshot.Kindly help me to resolve the issue.



   [image: image.png]

   .Thanks

   Kaviya Vadivel

   --

   https://mail.python.org/mailman/listinfo/python-list



References

   Visible links
   1. https://abhiramr.com/
   2. https://go.microsoft.com/fwlink/?LinkId=550986
   3. mailto:kaviyavadiv...@gmail.com
   4. mailto:python-list@python.org
-- 
https://mail.python.org/mailman/listinfo/python-list


Installation Error (0xc000007b)

2019-12-10 Thread Abhi Patel
i'm getting the error message while installing python in my dell laptop.
ERROR: the application was unable to start (0xc07b). Close the
application
Please help
-- 
https://mail.python.org/mailman/listinfo/python-list


pytube problem

2020-04-15 Thread Abhi Bajpai
Respected sir or mam..
I am facing issue related to pytube there is always problem with youtube module 
please look into this and try to solve it... I have to submit project.. and now 
all depends on you.

Sent from Mail for Windows 10

-- 
https://mail.python.org/mailman/listinfo/python-list