Re: Unicode confusion - Mailing list pgsql-general

From Chris Palmer
Subject Re: Unicode confusion
Date
Msg-id 4DC5F5CE7BA89D40B26FFD9A7982FE254D35C6@mail.geneedinc.com
Whole thread Raw
In response to Unicode confusion  ("Chris Palmer" <chris.palmer@geneed.com>)
Responses Re: Unicode confusion
List pgsql-general
Ian Barwick writes:

> OK, put it another way: Java is not able to or does not want to print
> the specified Unicode characters (the Yin / Yang symbol and something
> squiggly IIRC) to your STDOUT.

In the example I gave in my first post, stdout was a file. Shouldn't Java just write out bytes without trying to get
smart?Especially if stdout is not a tty? But see below. 

> This is nothing to do with the
> JDBC connection.
> I presume Java looks at your locale setting, maybe Google knows the
> answer ;-).

Yes, I'm searching now.

> Using a UTF-8 capable terminal (I use mlterm or konsole, no
> idea what options
> there are in Windows) the characters retrieved from Postgres
> and which are now
> in Java's internal Unicode encoding (which one I don't recall) can be
> displayed by converting them into UTF-8.

===
ps = new PrintStream(System.out, true, "UTF-8");
...
// this line might look strange to you if your mailer shows it differently than mine does:
s.executeUpdate("INSERT INTO test (chug) VALUES ('¤ä´©¬O¬°¤FÅý')");
s.executeUpdate("INSERT INTO test (chug) VALUES ('testing')");
s.executeUpdate("INSERT INTO test (chug) VALUES ('\u262f\u0b87')");
...
ps.println(rs.getString("chug"));
===

I'm no Java expert, so if that's not a good way to get UTF-8-encoded output, please let me know. When I try it, I get:

===
> java Noodle > goo
> cat goo
¤ä´©¬O¬°¤FÃ
ý
testing
â¯à®
===

I installed KDE on our Linux machine (the one running Java and Pg) and got the similar results using konsole. (Fwiw I
amusing PuTTY on Windows to connect to Linux). 

===
¤ä´©¬O¬°¤FÃý
testing
â¯à®
===

Note the lack of the newline in the middle of the first result.

In either case, konsole or PuTTY, I am not getting back what I put in (the first s.executeUpdate(...), above).

In psql, the result of "select * from test" looks the same as it does when output by the Noodle Java program.

Fwiw, I do have the encoding of this database set to UNICODE:

===
> psql -p 9000 -l
               List of databases
   Name    |         Owner          | Encoding
-----------+------------------------+-----------
 japanese  | GENEEDINC+chris.palmer | EUC_JP
 template0 | GENEEDINC+chris.palmer | SQL_ASCII
 template1 | GENEEDINC+chris.palmer | SQL_ASCII
 test      | GENEEDINC+chris.palmer | SQL_ASCII
 unicode   | GENEEDINC+chris.palmer | UNICODE
===


I am much more confused now than I ever have been. :)


--
Chris Palmer    Systems Programmer    GeneEd


pgsql-general by date:

Previous
From: Devrim GUNDUZ
Date:
Subject: .NET and PostgreSQL
Next
From: Karsten Hilbert
Date:
Subject: Re: create db with -E