Re: RE: [JDBC] é converted in é

From: Guillaume Cottenceau <gc(at)mnc(dot)ch>
To: "Laurent Schweizer" <laurent(dot)schweizer(at)peoplefone(dot)com>
Cc: <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: RE: [JDBC] é converted in é
Date: 2013-02-11 08:37:32
Message-ID: m3d2w7p7oz.fsf@mnc.ch
Views: Raw Message | Whole Thread | Download mbox
Thread:
Lists: pgsql-jdbc

"Laurent Schweizer" <laurent.schweizer 'at' peoplefone.com> writes:

> Dear all,
>
> Bellow I have attached the code that I use to do the test, as you can see it's very simple.
>
> I just do the test on windows (via Eclipse) and encoding is OK !
> When I run same class on Linux , in command line, the encoding is not OK.
>
> Did I need to set some specific parameters on linux ?

If your tests are based on printing, you are not sure if your
encoding is ok is no places, I guess your insert/update might
also be using fixed string from sourcecode, which isn't much
reliable either. Your data might even be wrong in the DB.

At least in your test, which is based on System.out.println which
will work differently based on the default encoding of your
system, pipe to hexdump -C and check 0xc3 0xa9 is returned where
the é character should be. It would indicate everything works
well.

> Regards
>
> Laurent
>
>
>
> import java.io.UnsupportedEncodingException;
> import java.nio.ByteBuffer;
> import java.nio.CharBuffer;
> import java.nio.charset.Charset;
> import java.sql.*;
> public class Testing {
>
> Connection conn;
> /**
> * @param args
> */
> public static void main(String[] args) {
> // TODO Auto-generated method stub
> new Testing();
>
> }
>
>
>
> public Testing ()
> {
> try
> {
>
> Class.forName("org.postgresql.Driver").newInstance();
> String url = "jdbc:postgresql://95.128.80.38/testchar?useUnicode=true&characterEncoding=utf8";
> conn = DriverManager.getConnection(url, "postgres", "");
> doTests();
> conn.close();
> }
> catch (ClassNotFoundException ex) {System.err.println(ex.getMessage());}
> catch (IllegalAccessException ex) {System.err.println(ex.getMessage());}
> catch (InstantiationException ex) {System.err.println(ex.getMessage());}
> catch (SQLException ex) {System.err.println(ex.getMessage());}
> }
>
> private void doTests()
> {
> doSelectTest();
>
>
> }
>
> private void doSelectTest()
> {
>
> // String query1 = "SET client_encoding = 'LATIN9';";
>
>
> String query = "SELECT input FROM test ";
> try
> {
>
> // Statement st2 = conn.createStatement();
> // st2.execute(query1);
> Statement st = conn.createStatement();
> ResultSet rs = st.executeQuery(query);
> while (rs.next())
> {
> String s = rs.getString(1);
> System.out.println("val:"+s );
>
> }
> }
> catch (SQLException ex)
> {
> System.err.println(ex.getMessage());
> }
>
>
> /*
> String queryup = "UPDATE test set input ='snom 320 é' WHERE id=1";
> try
> {
> Statement st = conn.createStatement();
> st.execute(queryup);
>
> }
> catch (SQLException ex)
> {
> System.err.println(ex.getMessage());
> }*/
>
> }
>
> -----Message d'origine-----
> De : pgsql-jdbc-owner(at)postgresql(dot)org [mailto:pgsql-jdbc-owner(at)postgresql(dot)org] De la part de dmp
> Envoyé : samedi 9 février 2013 17:55
> À : Laurent Schweizer; pgsql-jdbc(at)postgresql(dot)org
> Objet : Re: [JDBC] é converted in é
>
> Hello Laurent,
>
> Use the Method provided to compare the two inserts methods, the one I have demostrated and your process. Reply back with the modified method, code, so that we may have a way of duplicating the error you are describing.
>
> I modified the Method this morning and used a update on the extended ASCII chararcter and was still able to to a system.out and placement in JLabel to observe the correct results.
>
> If you drive to a garage and ask the mechanic to fix your lights on your car because they do not work and he/she turns them on and they work, how do you expect the mechanic to help?
>
> Provide sample code demostrating your issue and perhaps help can be more forth comming.
>
> danap.
>
> Laurent Schweizer wrote:
>> Hello,
>>
>> I see that you directly convert special character , the problem is
>> that with my application data are inserted with another process .
>>
>> When they insert the data in the DB all is ok. I have only an issue
>> with JDBC to get them correctly.
>>
>> Laurent
>>
>>
>>
>>
>> -----Message d'origine-----
>> De : pgsql-jdbc-owner(at)postgresql(dot)org
>> [mailto:pgsql-jdbc-owner(at)postgresql(dot)org] De la part de dmp Envoyé :
>> samedi 9 février 2013 02:42 À : laurent(dot)schweizer(at)peoplefone(dot)com;
>> pgsql-jdbc(at)postgresql(dot)org Objet : Re: [JDBC] é converted in é
>>
>> > Laurent Schweizer<laurent(dot)schweizer(at)peoplefone(dot)com> wrote:
>> >
>> > > I have an issue with special character like é.
>> >
>> > > I have as server postgres 9.2, I have created a new DB ,
>> encoding> >
>> utf8> > > > Client is a very simple test class that:
>> > > 1) update a varchar value
>> > > 2) read the same value and print them
>> > >
>> > > If I update the varchar with a special character like “é”
>> the> > value in the DB is correct ( I check them with another
>> software )> > but when I read them from my simple java class the value is not> > correct
>> and the é is converted in é> > > > I have added to the connection string
>> the option:
>> > > ?useUnicode=true&characterEncoding=utf8
>> > >
>> > > And if I do a : "SHOW client_encoding;” I get UTF8> > It is
>> behaving as though the client is using a character encoding> other
>> than
>> UTF8 -- some sort of 8-bit encoding, probably. You must> set
>> client_encoding to match.
>> >
>> > -Kevin
>>
>> Hello Laruent,
>>
>> I have tested the following method with the URL parameters you
>> indicated with PostgreSQL 9.0.1 and the latest driver. Both on a linux
>> and windows systems with the same result of the A and the Acute Latin
>> e properly displaying in a system.out and the frame. I suppose it
>> could be modified slightly to also check and update rather than an insert.
>>
>> danap.
>>
>> private void testInsertUTF(Connection con)
>> {
>> // Method Instances
>> String sqlStatementString;
>> Statement sqlStatement;
>> PreparedStatement pstmt;
>> ResultSet rs;
>>
>> try
>> {
>> sqlStatement = con.createStatement();
>> con.setAutoCommit(false);
>>
>> sqlStatementString = "DROP TABLE IF EXISTS jdbc_demo";
>> sqlStatement.execute(sqlStatementString);
>>
>> sqlStatementString = "Create Table jdbc_demo (col VARCHAR(30))";
>> sqlStatement.execute(sqlStatementString);
>>
>> pstmt = con.prepareStatement("INSERT INTO jdbc_demo VALUES
>> (?), (?)");
>> pstmt.setString(1, "\u0041"); // A
>> pstmt.setString(2, "\u00E9"); // Acute Latin e
>> pstmt.execute();
>>
>> sqlStatementString = "SELECT * FROM jdbc_demo";
>> sqlStatement.execute(sqlStatementString);
>>
>> rs = sqlStatement.executeQuery(sqlStatementString);
>>
>> JPanel panel = new JPanel();
>>
>> while (rs.next())
>> {
>> String dataString = rs.getString("col");
>> System.out.println("col:" + dataString);
>> panel.add(new JLabel(dataString));
>> }
>> rs.close();
>>
>> JFrame frame = new JFrame();
>> frame.getContentPane().add(panel);
>> frame.setSize(200, 200);
>> frame.setVisible(true);
>>
>> sqlStatementString = "DROP TABLE IF EXISTS jdbc_demo";
>> sqlStatement.execute(sqlStatementString);
>>
>> sqlStatement.close();
>> pstmt.close();
>> con.setAutoCommit(true);
>> }
>> catch (SQLException sqle)
>> {
>> System.out.println("SQL Exeception" + sqle);
>> }
>> }
>>
>>
>> --
>> Sent via pgsql-jdbc mailing list (pgsql-jdbc(at)postgresql(dot)org) To make
>> changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-jdbc
>>
>>
>>
>
>
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc(at)postgresql(dot)org) To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc

--
Guillaume Cottenceau

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Bryan Varner 2013-02-12 03:36:30 PostgreSQL XAResource & GlassFish 3.1.2.2
Previous Message Vitalii Tymchyshyn 2013-02-09 19:24:57 Re: [JDBC] JPA + enum == Exception