Received: from sraigw.sra.co.jp (sraigw.sra.co.jp [202.32.10.2]) by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id eA94fbs83240 for ; Wed, 8 Nov 2000 23:41:37 -0500 (EST) (envelope-from t-ishii@sra.co.jp) Received: from sranhk.sra.co.jp (sranhk [133.137.36.134]) by sraigw.sra.co.jp (8.8.7/3.7W-sraigw) with ESMTP id NAA17063 for ; Thu, 9 Nov 2000 13:40:58 +0900 (JST) Received: from localhost (IDENT:t-ishii@portsv1-1 [133.137.80.1]) by sranhk.sra.co.jp (8.9.3/3.7W-srambox) with ESMTP id NAA24895; Thu, 9 Nov 2000 13:40:56 +0900 To: cch@cc.kmu.edu.tw Cc: pgsql-patches@postgresql.org Subject: Re: A Patch for MIC to EUC_TW code converting in mb support In-Reply-To: <3A0A07FA.129ED448@cc.kmu.edu.tw> References: <3A0A07FA.129ED448@cc.kmu.edu.tw> X-Mailer: Mew version 1.94.1 on Emacs 20.5 / Mule 4.1 =?iso-2022-jp?B?KBskQjAqGyhCKQ==?= Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20001109134325L.t-ishii@sra.co.jp> Date: Thu, 09 Nov 2000 13:43:25 +0900 From: Tatsuo Ishii X-Dispatcher: imput version 990905(IM130) Lines: 48 X-Archive-Number: 200011/32 X-Sequence-Number: 40 > ============================================================================ > > POSTGRESQL BUG REPORT: MIC to EUC_TW code converting in mb support > ============================================================================ > > System Configuration > --------------------- > Architecture (example: Intel Pentium) :x86 > Operating System (example: Linux 2.0.26 ELF) :Linux 2.2.x and FreeBSD > 3.5R > PostgreSQL version (example: PostgreSQL-7.0) :PostgreSQL-7.0.2 > Compiler used (example: gcc 2.8.0) :egcs-2.91.66, gcc 2.7.3 > > A FULL description of the problem: > ------------------------------------------------ > In PostgreSQL mb (multi-byte) support, there is a bug in code converting > > for MIC to EUC_TW. Original mic2euc_tw() in conv.c converts CNS > 11643-1992 > Plane 2 into 2 bytes EUC_TW encoding. But characters in CNS 11643-1992 > Plane 2 > should be converted into 4 bytes EUC_TW encoding instead. > > A way to repeat the problem: > ---------------------------------------------------------------------- > When you initdb with -E EUC_TW and set PGCLIENTENCODING to BIG5, > you will find all the characters in CNS 11643-1992 Plane 2 are > incorrectly stored or output. > > This problem might be fixed by the solution in the attachement. Thanks for pointing it out. Your fix seems correct. BTW I have found another bug with EUC_TW support. line 917 in conv.c: *p++ = c1 - LC_CNS11643_3 + 0xa3; this should be: *p++ = *mic++ - LC_CNS11643_3 + 0xa3; Otherwise, CNS 11643-1992 Plane 3 or more won't work. Could you test it out with CNS 11643-1992 Plane 3 or more? If they are ok, I will fix the current source and make a patch for 7.0.3 (I guess it's too late to back-patch the 7.0 tree). -- Tatsuo Ishii