Re: Encoding Problem

From: Jerome Colombie <jcolombie(at)gmx(dot)ch>
To: Kris Jurka <books(at)ejurka(dot)com>
Cc: Oliver Jowett <oliver(at)opencloud(dot)com>, pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Encoding Problem
Date: 2005-01-13 23:34:53
Message-ID: 41E7059D.8040001@gmx.ch
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Hi,

I made a low-level program which prints to the console. It seems that
the jdbc driver is correct, although the Strings need some
postprocessing in Java. I want to create html output, so I don't know if
I have to change my windows settings, java settings (Locale) or just
need to reformat the strings in java code.
My test program looks like this:

*********
bh=# create table test (
t VARCHAR(5)
);

bh=# insert into test values ('aäöü');

bh=# select * from test;
t
------
aäöü
(1 row)

bh=# select getdatabaseencoding();
getdatabaseencoding
---------------------
LATIN1
(1 row)

bh=# SHOW client_encoding;
client_encoding
-----------------
LATIN1
(1 row)

bh=# select version();
version
--------------------------------------------------------------------------------------------------------
PostgreSQL 8.0.0rc2 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC)
3.3.1 (mingw special 20030804-1)
(1 row)
*********
import java.sql.*;
import java.util.Properties;

public class BaseDAO {
protected static String dbHost = "localhost";
protected static String dbUrl = "jdbc:postgresql://" + dbHost +
":5432/bh";
protected static String dbUser = "postgres";
protected static String dbPassword = "***";
protected static String dbDriver = "org.postgresql.Driver";

static {
//Register driver
try {

DriverManager.registerDriver((Driver)Class.forName(dbDriver).newInstance());
} catch (Exception e){
System.out.println("Error: " + e);
}
}

public BaseDAO() {
super();
try {
Properties props = new Properties();
props.put("user", dbUser);
props.put("password", dbPassword);
Connection con = DriverManager.getConnection(dbUrl, props);
ResultSet rs =
con.createStatement().executeQuery("select * from test");
if (rs.next()) {
byte[] temp = rs.getString("t").getBytes();
System.out.println("Database String");
System.out.println(rs.getString("t"));
System.out.println("Database Bytes");
for (int i = 0; i < temp.length; i++) {
System.out.println(temp[i]);
}
}
} catch(SQLException se) {
System.out.println("Error: " + se);
}
}

public static void main(String[] args) {
BaseDAO dao = new BaseDAO();
String test = "aäöü";
System.out.println("Java String");
System.out.println(test);
System.out.println("Java Bytes");
byte[] temp = test.getBytes();
for (int i = 0; i < temp.length; i++) {
System.out.println(temp[i]);
}
try {
System.out.println("ISO-8859-1");
String t1 = new String("aäöü".getBytes(), "ISO-8859-1");
temp = t1.getBytes();
for (int i = 0; i < temp.length; i++) {
System.out.println(temp[i]);
}
} catch (java.io.UnsupportedEncodingException e) {
System.out.println("Encoding exception: " + e);
}
try {
System.out.println("UTF-8");
String t1 = new String("aäöü".getBytes(), "UTF-8");
temp = t1.getBytes();
for (int i = 0; i < temp.length; i++) {
System.out.println(temp[i]);
}
} catch (java.io.UnsupportedEncodingException e) {
System.out.println("Encoding exception: " + e);
}

}
}
*********
D:\temp\test>javac BaseDAO.java

D:\temp\test>java -classpath d:\projects\jar\pg74.214.jdbc3.jar;. BaseDAO
Database String
a???
Database Bytes
97
63
63
63
Java String
aõ÷³
Java Bytes
97
-28
-10
-4
ISO-8859-1
97
-28
-10
-4
UTF-8
97
63
63
*********
How can I get the correct output in html with java code? I know that
technically it hasn't got to do with jdbc but I still hope someone can
give me a solution so I don't need to change the java code. I hope I can
solve this problem by changing either the database configuration or the
java or windows locale.

Regards, Jerome

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Kris Jurka 2005-01-13 23:51:07 Re: Encoding Problem
Previous Message Oliver Jowett 2005-01-13 21:04:59 Re: jdbc error