[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 メーリングリストの案内