Visualizzazione dei risultati da 1 a 10 su 10

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49

    maledetti caratteri accentati !

    Buongiorno,

    Ho creato un database in mysql con frontend in java, il problema è che se inserisco un carattere accentato tipo "è" mi ritorna il classico punto interrogativo.
    ho fatto alcune prove....nella jtextarea al momento dell'immissione viene visualizzato correttamente....così come nella console...e così anche nel database....solo quando richiamo per visualizzare il tutto mi ritorna il carattere sbagliato, sia java che mysql sono dettati per utf-8...di seguito alcuni screenshot:

    Scrive correttamente a video:
    Schermata 2016-09-30 alle 13.57.17.png

    Richiamandolo...si vede il ?:
    2.jpg

    se ispeziono il contenuto con workbench....si vede che in mysql è memorizzato correttamente....quindi è un problema di quando richiedo i dati.

    il codice è questo:
    codice:
     public class MysqlStuff {	 
    	 static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    	 
    	 static final String DB_URL ="jdbc:mysql://localhost/";
    	 static final String db= "LessonLearned";
             static final String u ="xxxxx";
             static final String p= "xxxxx";
    	 static Connection UP=null;
    	 public static Connection connetti() 
    	 throws ClassNotFoundException, SQLException{
    		 System.out.println("mi connetto...");
    		 UP = null;
    		 Class.forName(JDBC_DRIVER);
    		 //punto 3 ottenere connessione
    		 UP = DriverManager.getConnection(DB_URL+db,u,p);
    		 return UP;
    	 }
    codice:
    public  static void inviaDatiSQL(String sql,String stat) throws SQLException, ClassNotFoundException{                 UP = connetti();
    		 System.out.println("INVIO dati a DB: \n"+ sql);
    		 Statement stmt = null;
    		 
                     PreparedStatement test = UP.prepareStatement(sql);
                     test.setString(1, stat);
                     
    		 test.executeUpdate();
    		 System.out.println("Finito !");
    	 }
    codice:
     public  static ResultSet richiediDatiSQL (String sql) throws SQLException, ClassNotFoundException{                 UP = connetti();
    		 System.out.println("RICHIEDO dati a DB: \n\n"+ sql);
    		 Statement stmt = null;
    		 ResultSet res = null;
    		 stmt = UP.createStatement();
    		 res = stmt.executeQuery(sql);
                     
    		 return res;
    		 
    	 }
    Immagini allegate Immagini allegate

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Innanzitutto chiarisci quale è l'encoding usato per quella tabella/colonne. Questo lo puoi vedere da un sw di amministrazione del database MySQL oppure con delle query apposite.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Innanzitutto chiarisci quale è l'encoding usato per quella tabella/colonne. Questo lo puoi vedere da un sw di amministrazione del database MySQL oppure con delle query apposite.
    Sia il database che le tabelle sono in utf-8, avevo pensato anche io a questa cosa ed infatti di default mysql le crea in latin-1, ma avevo provveduto.

    Alex

    mysql2.jpg

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49
    Aggiornamento:

    provando e riprovando ho sostituito temporaneamente una JtextArea con una JtextField....è tutto ok con essa.
    Quindi deduco che il problema sia proprio sul componente.

    Ogni aiuto è ben accetto !

    Alex

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da magobin Visualizza il messaggio
    provando e riprovando ho sostituito temporaneamente una JtextArea con una JtextField....è tutto ok con essa.
    Quindi deduco che il problema sia proprio sul componente.
    Non credo .... perlomeno mi sembrerebbe molto strano (però bisognerebbe vedere come hai usato JTextArea). Le problematiche sui charset in generale sono un po' spinose e possono capitare anche per via di errori "subdoli" e magari a più livelli.

    Visto che il programma è tuo ... debuggalo! Cioè verifica cosa contengono le stringhe. La "è" per essere corretta nella stringa Java DEVE essere un char di codice 232 (0x00E8 cioè esadecimale). Quel simbolo con ? che hai mostrato come è codificato nella stringa Java? Già da questo si potrebbe forse capire cosa è successo.

    Inoltre, prova a leggere qui: 5.4 Using Character Sets and Unicode
    è la documentazione ufficiale del Connector/J che spiega in generale l'uso dei charset.

    Prova anche a fare "a mano" una SELECT sul quel campo usando la funzione ORD() di MySQL che ti fornisce il codice del primo carattere della stringa. Fai chiaramente in modo che il carattere incriminato sia appunto il primo.
    Ultima modifica di andbin; 01-10-2016 a 11:07
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49
    Quote Originariamente inviata da andbin Visualizza il messaggio

    Inoltre, prova a leggere qui: 5.4 Using Character Sets and Unicode
    è la documentazione ufficiale del Connector/J che spiega in generale l'uso dei charset.

    Prova anche a fare "a mano" una SELECT sul quel campo usando la funzione ORD() di MySQL che ti fornisce il codice del primo carattere della stringa. Fai chiaramente in modo che il carattere incriminato sia appunto il primo.
    Allora....sto debuggando il programma....ho capito che il problema è nella tipologia di dati della colonna che ospita il dato e cioè BLOB. Ho cercato di ovviare inserendo questa modifica:

    codice:
    byte[] domande = res.getString("Domanda").getBytes();
                           String s = new String( domande, "UTF-8");
    dato che la table ha come encoding UTF8-Default collation

    Mysql non lo conosco benissimo...comunque ora provo a fare un SELECT sul campo come dici tu

    Intanto grazie
    Alex
    Ultima modifica di magobin; 01-10-2016 a 15:24 Motivo: errori di ortografia

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49
    Aggiorno dicendo che ho fatto un ORD sul campo BLOB che ospita la mia "�" e il codice � effettivamente il 232

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    49
    anche HTML.it non mi riconosce la mia "è" \232

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.