Thread: Re: [JDBC] RE: [JDBC] é converted in Ã(c)

Re: [JDBC] RE: [JDBC] é converted in Ã(c)

From
Dave Cramer
Date:

I am thinking that it is the printing that is changing the character. From your test the server is not local what is the locale of the Linux box

On 2013-02-09 12:42 PM, "Laurent Schweizer" <laurent.schweizer@peoplefone.com> wrote:
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 ?

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@postgresql.org [mailto:pgsql-jdbc-owner@postgresql.org] De la part de dmp
Envoyé : samedi 9 février 2013 17:55
À : Laurent Schweizer; pgsql-jdbc@postgresql.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@postgresql.org
> [mailto:pgsql-jdbc-owner@postgresql.org] De la part de dmp Envoyé :
> samedi 9 février 2013 02:42 À : laurent.schweizer@peoplefone.com;
> pgsql-jdbc@postgresql.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@postgresql.org) To make
> changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc
>
>
>



--
Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org) To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-jdbc



--
Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-jdbc

Re: é converted in Ã(c)

From
dmp
Date:
Dave,

That is exaclty what I suspect also, just like you guys have already
indicated. This is not a pgJDBC issue.

danap.


Dave Cramer wrote:
> I am thinking that it is the printing that is changing the character.
>  From your test the server is not local what is the locale of the Linux box
>
> On 2013-02-09 12:42 PM, "Laurent Schweizer"
> <laurent.schweizer@peoplefone.com
> <mailto:laurent.schweizer@peoplefone.com>> wrote:
>
>     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 ?
>
>     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
>     <http://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@postgresql.org
>     <mailto:pgsql-jdbc-owner@postgresql.org>
>     [mailto:pgsql-jdbc-owner@postgresql.org
>     <mailto:pgsql-jdbc-owner@postgresql.org>] De la part de dmp
>     Envoyé : samedi 9 février 2013 17:55
>     À : Laurent Schweizer; pgsql-jdbc@postgresql.org
>     <mailto:pgsql-jdbc@postgresql.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@postgresql.org
>     <mailto:pgsql-jdbc-owner@postgresql.org>
>      > [mailto:pgsql-jdbc-owner@postgresql.org
>     <mailto:pgsql-jdbc-owner@postgresql.org>] De la part de dmp Envoyé :
>      > samedi 9 février 2013 02:42 À : laurent.schweizer@peoplefone.com
>     <mailto:laurent.schweizer@peoplefone.com>;
>      > pgsql-jdbc@postgresql.org <mailto:pgsql-jdbc@postgresql.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@postgresql.org
>     <mailto:pgsql-jdbc@postgresql.org>) To make
>      > changes to your subscription:
>      > http://www.postgresql.org/mailpref/pgsql-jdbc
>      >
>      >
>      >
>
>
>
>     --
>     Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org
>     <mailto:pgsql-jdbc@postgresql.org>) To make changes to your
>     subscription:
>     http://www.postgresql.org/mailpref/pgsql-jdbc
>
>
>
>     --
>     Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org
>     <mailto:pgsql-jdbc@postgresql.org>)
>     To make changes to your subscription:
>     http://www.postgresql.org/mailpref/pgsql-jdbc
>