Received: from candle.pha.pa.us (candle.navpoint.com [162.33.245.46]) by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id eBM39P659608; Thu, 21 Dec 2000 22:09:25 -0500 (EST) (envelope-from pgman@candle.pha.pa.us) Received: (from pgman@localhost) by candle.pha.pa.us (8.9.0/8.9.0) id WAA25030; Thu, 21 Dec 2000 22:08:57 -0500 (EST) From: Bruce Momjian Message-Id: <200012220308.WAA25030@candle.pha.pa.us> Subject: Re: [PATCHES] patch for character set encoding detection for JDBC In-Reply-To: <3A42C05C.8BC5858D@xythos.com> "from Barry Lind at Dec 21, 2000 06:45:48 pm" To: Barry Lind Date: Thu, 21 Dec 2000 22:08:57 -0500 (EST) CC: pgsql-interfaces@postgresql.org, pgsql-patches@postgresql.org X-Mailer: ELM [version 2.4ME+ PL77 (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Archive-Number: 200012/206 X-Sequence-Number: 552 Thanks. Applied. *** ./Connection.java.orig Thu Dec 21 18:20:36 2000 --- ./Connection.java Thu Dec 21 18:21:49 2000 *************** *** 125,132 **** PG_HOST = host; PG_STATUS = CONNECTION_BAD; - encoding = info.getProperty("charSet"); // could be null - // Now make the initial connection try { --- 125,130 ---- *************** *** 265,274 **** // This may cause some clients to break when they assume anything other than ISO, // but then - they should be using the proper methods ;-) // // firstWarning = null; ! ExecSQL("set datestyle to 'ISO'"); // Initialise object handling initObjectTypes(); --- 263,346 ---- // This may cause some clients to break when they assume anything other than ISO, // but then - they should be using the proper methods ;-) // + // We also ask the DB for certain properties (i.e. DatabaseEncoding at this time) // firstWarning = null; ! java.sql.ResultSet initrset = ExecSQL("set datestyle to 'ISO'; select getdatabaseencoding()"); ! ! String dbEncoding = null; ! //retrieve DB properties ! if(initrset.next()) { ! ! //handle DatabaseEncoding ! dbEncoding = initrset.getString(1); ! //convert from the PostgreSQL name to the Java name ! if (dbEncoding.equals("SQL_ASCII")) { ! dbEncoding = "ASCII"; ! } else if (dbEncoding.equals("UNICODE")) { ! dbEncoding = "UTF8"; ! } else if (dbEncoding.equals("LATIN1")) { ! dbEncoding = "ISO8859_1"; ! } else if (dbEncoding.equals("LATIN2")) { ! dbEncoding = "ISO8859_2"; ! } else if (dbEncoding.equals("LATIN3")) { ! dbEncoding = "ISO8859_3"; ! } else if (dbEncoding.equals("LATIN4")) { ! dbEncoding = "ISO8859_4"; ! } else if (dbEncoding.equals("LATIN5")) { ! dbEncoding = "ISO8859_5"; ! } else if (dbEncoding.equals("LATIN6")) { ! dbEncoding = "ISO8859_6"; ! } else if (dbEncoding.equals("LATIN7")) { ! dbEncoding = "ISO8859_7"; ! } else if (dbEncoding.equals("LATIN8")) { ! dbEncoding = "ISO8859_8"; ! } else if (dbEncoding.equals("LATIN9")) { ! dbEncoding = "ISO8859_9"; ! } else if (dbEncoding.equals("EUC_JP")) { ! dbEncoding = "EUC_JP"; ! } else if (dbEncoding.equals("EUC_CN")) { ! dbEncoding = "EUC_CN"; ! } else if (dbEncoding.equals("EUC_KR")) { ! dbEncoding = "EUC_KR"; ! } else if (dbEncoding.equals("EUC_TW")) { ! dbEncoding = "EUC_TW"; ! } else if (dbEncoding.equals("KOI8")) { ! dbEncoding = "KOI8_R"; ! } else if (dbEncoding.equals("WIN")) { ! dbEncoding = "Cp1252"; ! } else { ! dbEncoding = null; ! } ! } ! ! ! //Set the encoding for this connection ! //Since the encoding could be specified or obtained from the DB we use the ! //following order: ! // 1. passed as a property ! // 2. value from DB if supported by current JVM ! // 3. default for JVM (leave encoding null) ! String passedEncoding = info.getProperty("charSet"); // could be null ! ! if (passedEncoding != null) { ! encoding = passedEncoding; ! } else { ! if (dbEncoding != null) { ! //test DB encoding ! try { ! "TEST".getBytes(dbEncoding); ! //no error the encoding is supported by the current JVM ! encoding = dbEncoding; ! } catch (UnsupportedEncodingException uee) { ! //dbEncoding is not supported by the current JVM ! encoding = null; ! } ! } else { ! encoding = null; ! } ! } // Initialise object handling initObjectTypes(); [ Charset UTF-8 unsupported, skipping... ] [ Charset UTF-8 unsupported, skipping... ] -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026