Bonjour à tous,
J'ai un souci dans la récupération de chaîne de caractère en UTF8 via Java. Je sais que c'est un souci récurent sur les forums mais j'ai déjà essayé tellement de choses sans succès que je fais appel à vous pour savoir quelle bétise j'ai fais.
Lorsque j'interroge via le client mysql, tout est OK.
Voici les variables :
Voici le résulat (le forum n'affiche pas non plus les caractères...mais ils s'affiche correctement chez moi) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 mysql> show variables where variable_name like 'collation%' or variable_name like 'char%'; | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | collation_connection | latin1_swedish_ci | | collation_database | utf8_unicode_ci | | collation_server | latin1_swedish_ci |
Lorsque j'effectue les mêmes requêtes via un programme Java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 mysql > select name from mytable; | ÁRPÁD-AGRÁR Termelő, Kereskedelmi és Szolgáltató Zártkörű Részvénytársaság | Экспериментально-консервный завод
Voici les variables :
Voici le résultat (il ne s'affiche pas correctement) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 character_set_client : utf8 character_set_connection : utf8 character_set_database : utf8 character_set_filesystem : binary character_set_results : utf8 character_set_server : latin1 character_set_system : utf8 character_sets_dir : /usr/share/mysql/charsets/ collation_connection : utf8_general_ci collation_database : utf8_unicode_ci collation_server : latin1_swedish_ci
Voici mon code java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Ã�RPÃ�D-AGRÃ�R TermelÅ, Kereskedelmi és Szolgáltató Zártkörű Részvénytársaság ТÐ*ÐÐÐÐ�ТÐ� Ð�ÐÐ*Ð
Ma question général : pourquoi ça marche avec le client mysql alors que les variables indique pas mal de latin1 alors qu'en java ca ne fonctionne pas alors que presque tout est en utf8 ? (jai bien entendu testé avec les mêmes configs niveau variable en java)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public class UTF8Test { public static void main (String[]args) { java.sql.Connection conn = null; try { PrintStream sysout = new PrintStream(System.out, true, "UTF-8"); Class.forName("com.mysql.jdbc.Driver").newInstance(); String jdbc = "jdbc:mysql://localhost/mydatabase?user=root"; String jdbcutf8 = "&useUnicode=true&characterEncoding=UTF-8"; conn = DriverManager.getConnection(jdbc+jdbcutf8); String utf8 = "SET NAMES 'UTF8'"; String show = "show variables where variable_name like 'collation%' or variable_name like 'char%';"; String sql = "SELECT name AS name FROM mytable"; Statement st = conn.createStatement(); st.execute(utf8); ResultSet rs = st.executeQuery(show); while(rs.next()) { sysout.print(new String(rs.getBytes(1), "UTF-8")+" : "); sysout.println(new String(rs.getBytes(2), "UTF-8")); } sysout.println(); rs = st.executeQuery(sql); while(rs.next()) { sysout.println(new String(rs.getBytes("name"), "UTF-8")); } conn.close(); } catch(Throwable t) { t.printStackTrace(); } } }
Je fais le tous en mode console en local. Voici les différentes propriétés :
Java : jdk 1.6
driver : mysql-connector-java-5.0.8.jar
D'avance merci pour vos retours.
Partager