RE: How to read/write multibyte to database

Поиск
Список
Период
Сортировка
От Tatsuo Ishii
Тема RE: How to read/write multibyte to database
Дата
Msg-id 20010316102451L.t-ishii@sra.co.jp
обсуждение исходный текст
Ответ на RE: How to read/write multibyte to database  (Tatsuo Ishii <t-ishii@sra.co.jp>)
Список pgsql-general
From: "Jeff Lu" <jklcom@mindspring.com>
Subject: RE: [GENERAL] How to read/write multibyte to database
Date: Thu, 15 Mar 2001 10:56:13 -0500
Message-ID: <NDBBIHPECLIGKCCLMACAAEJACLAA.jklcom@mindspring.com>

> Here're functions:
> What else do I need to watch out for besides '\'?
> Thanks for your help.

You should always watch out the second byte of Big5.  What would
happen if "stop" appears in the second byte of Big5 string provided by
"in" in splitword?
--
Tatsuo Ishii

> void splitword(uchar *out, uchar *in, uchar stop)
> {
>    int i, j;
>
>    while(*in == ' ') in++; /* skip past any spaces */
>    for(i = 0; in[i] && (in[i] != stop); i++)
>       out[i] = in[i];
>    out[i] = '\0'; /* terminate it */
>    if(in[i]) ++i; /* position past the stop */
>    while(in[i] == ' ') i++; /* skip past any spaces */
>    for(j = 0; in[j]; )  /* shift the rest of the in */
>       in[j++] = in[i++];
> }
>
> uchar x2c(uchar *x)
> {
>    register uchar c;
>
>    /* note: (x & 0xdf) makes x upper case */
>    c  = (x[0] >= 'A' ? ((x[0] & 0xdf) - 'A') + 10 : (x[0] - '0'));
>    c *= 16;
>    c += (x[1] >= 'A' ? ((x[1] & 0xdf) - 'A') + 10 : (x[1] - '0'));
>    return(c);
> }
>
> void unescape_url(uchar *url)
> {
>    register int i, j;
>
>    for(i = 0, j = 0; url[j]; ++i, ++j)
>    {
>       if((url[i] = url[j]) == '%')
>       {
>          url[i] = x2c(&url[j + 1]);
>          j += 2;
>       }
>       else if (url[i] == '+')
>          url[i] = ' ';
>    }
>    url[i] = '\0';  /* terminate it at the new length */
> }
>
>
>
> -----Original Message-----
> From: Tatsuo Ishii [mailto:t-ishii@sra.co.jp]
> Sent: Thursday, March 15, 2001 7:16 AM
> To: jklcom@mindspring.com
> Cc: pgsql-general@postgresql.org
> Subject: RE: [GENERAL] How to read/write multibyte to database
>
>
> > Can you please tell me what I need to do in my program to treat BIG5 such
> > that it will not conflict with ASCII escape sequence?
>
> Probably splitword and unescape_url need to rework, I'm not sure
> actualy what you are doing inside them though. For example, if you
> need to find '&', you would do like this:
>
> unsigned char *p = your_string_to_parse;
> int len = strlen(p);
> while (len > 0)
> {
>   if (*p == '&')
>     break;
>   if (p > 0x7f)    /* first byte of BIG5 ? */
>   {
>     p++;        /* skip second byte */
>     len--;
>   }
>   p++;
>   len--;
> }
>
> > Thanks
> >
> > -----Original Message-----
> > From: Tatsuo Ishii [mailto:t-ishii@sra.co.jp]
> > Sent: Saturday, March 10, 2001 8:39 AM
> > To: jklcom@mindspring.com
> > Cc: pgsql-general@postgresql.org
> > Subject: RE: [GENERAL] How to read/write multibyte to database
> >
> >
> > > I'm using BIG5
> >
> > Then you lose. Because BIG5 containts byte patterns conflicting with
> > ASCII special charcters (like '\'), I guess your code:
> >
> >     for(i=0; *queryString; i++)
> >     {
> >       splitword(items.Item, queryString, '&');
> >       unescape_url(items.Item);
> >       splitword(items.name, items.Item, '=');
> >
> >       if(!strcmp(items.name, "Name"))
> >       {
> >         strcpy(name, items.Item);
> >       }
> >       else if(!strcmp(items.name, "Address"))
> >       {
> >         strcpy(address, items.Item);
> >       }
> >
> > won't work. Change your program to treat BIG5 carefully.  Or you
> > probably better to use EUC_TW or UTF-8 to write your web contents.
> > --
> > Tatsuo Ishii

В списке pgsql-general по дате отправления:

Предыдущее
От: Tatsuo Ishii
Дата:
Сообщение: RE: How to read/write multibyte to database
Следующее
От: Tatsuo Ishii
Дата:
Сообщение: Re: shared memory settings: SHMMAX and SHMALL