[pgsql-jp: 37189] Re: PQescapeStringのreturn値について
Tatsuo Ishii
ishii @ sraoss.co.jp
2006年 6月 8日 (木) 22:58:20 JST
石井です.
> 北河です。
> libpq 8.1.4にて下記の現象を確認しました。
>
> 動作環境
> RedhatLinux AS3
> kernel:2.4.21-40
> PostgreSQL:8.1.4(libpq8.1.4)
> client_encoding:sjis
>
> 現象
> PQescapeStringに1バイト目に文字コード[0x8F]を含むSJISの2バイト文字列
> (「春」「準」「諸」等)を渡すと、結果として末尾に半角スペースが付加された
> 文字列がreturnされる。
> これは「春が来た」、「今は春です」等のように、渡す文字列の一部に含まれる
> 場合でも同様です。
こちらでは再現しませんね.
-----------------------------------
#include "libpq-fe.h"
main()
{
static unsigned char str[] = {0x8f, 0x74};
char buf[16];
int len;
unsigned char *p;
PGconn *con;
p = buf;
con = PQconnectdb("dbname=test");
if (PQstatus(con) != CONNECTION_OK)
{
exit(1);
}
if (PQsetClientEncoding(con, "SJIS"))
{
exit(1);
}
len = PQescapeString(p, str, sizeof(str));
printf("PQescapeString returns %d\n", len);
while (len--)
{
printf("=%x= ", *p++);
}
printf("\n");
PQfinish(con);
}
-----------------------------------
こんなプログラムを実行すると,
PQescapeString returns 2
=8f= =74=
と表示され,正常のように思えます.ちなみに,8f74は「春」です.
ちなみに環境は Vine Linux 3.2です.
--
Tatsuo Ishii
SRA OSS, Inc. Japan
pgsql-jp メーリングリストの案内