Signe euro mal interprété et remplacé par ? [Résolu]

cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 20 juil. 2007 à 17:35 - Dernière réponse : abaudouin84 10 Messages postés lundi 16 mars 2009Date d'inscription 3 novembre 2009 Dernière intervention
- 30 avril 2009 à 19:09
Bonjours à tous,

voici mon problème :

lorsque j'enregistre dans ma base de données un textbox comprenant le signe euro, celui-ci est remplacé par : ?

et lorsque je veut afficher un champs avec le signe euro dans un textbox (enregistrer dans ma base de données "en brut", donc bien vu par celle-ci comme le signe euro), mon interface c# m'affiche un carré (il ne reconnait donc pas le caractère).

comment faire?

(ps : Je développe sous Visual c# express 2005,)
Afficher la suite 

14 réponses

Répondre au sujet
cs_Yxion 219 Messages postés jeudi 6 juillet 2006Date d'inscription 7 septembre 2009 Dernière intervention - 21 juil. 2007 à 16:07
+3
Utile
J'ai  trouvé ca pour JDBC de Java :
String url = "jdbc:mysql://127.0.0.1/projet?charset=iso_1";
C'est juste pour te montrer comment choisir l'encodage dans l'URL de connection à la base de données
Il faudrait savoir quel est l'encodage de la tienne... (comme tu le dis, j'ai vu qu'ADO utilise unicode)

<hr />
I love .net
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Yxion
cs_Yxion 219 Messages postés jeudi 6 juillet 2006Date d'inscription 7 septembre 2009 Dernière intervention - 20 juil. 2007 à 17:58
0
Utile
pb d'encodage et décodage de caractères, il faudrait que tu en dises plus sur le type de bdd (SQL Server?), le type du champs (Text ANSI)et ce que tu utilises pour afficher ca (ADO.NET).
Commenter la réponse de cs_Yxion
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 20 juil. 2007 à 18:04
0
Utile
J'utilise une base de données Mysql que l'exploite via MySqlConnector 1.1.
Je ne pense pas que cela vienne de la base de données car lorsque je crée un enregisterment par phpmyadmin le signe euro est conservé
Commenter la réponse de cs_Kassidy
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 20 juil. 2007 à 18:27
0
Utile
Apres étude plus poussé, ca a l'air de venir de MySql Connector .net 1.1 ... si quelqun a une idée ce serait génial
Commenter la réponse de cs_Kassidy
cs_Yxion 219 Messages postés jeudi 6 juillet 2006Date d'inscription 7 septembre 2009 Dernière intervention - 20 juil. 2007 à 18:33
0
Utile
Passer aux versions 5...
Commenter la réponse de cs_Yxion
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 20 juil. 2007 à 18:38
0
Utile
Ca n'a rien changer
Commenter la réponse de cs_Kassidy
cs_Yxion 219 Messages postés jeudi 6 juillet 2006Date d'inscription 7 septembre 2009 Dernière intervention - 20 juil. 2007 à 18:51
0
Utile
J'insiste sur le fait que tu devrais regardé du coté de l'encodage des caractères... ca viens de la (meme si ca s'affiche correctement dans ta base, ce qui est normal)
Commenter la réponse de cs_Yxion
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 20 juil. 2007 à 18:55
0
Utile
ok, je vais chercher dans ce sens la.

d'ailleur j'ai fait un test mon appli de migration de la bdd local=>server tourne sous mysql connector et enregistre bel et bien les signe euro, donc tu a surement raison
Commenter la réponse de cs_Kassidy
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 20 juil. 2007 à 18:57
0
Utile
precision :
Mysql Connector .net 1.1 (enfin maintenant 2.0 mais je vais devoir faire des modif...)
(et est développez en c# via la meme version c-a-d visual c# express 2005)
Commenter la réponse de cs_Kassidy
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 21 juil. 2007 à 15:11
0
Utile
je ne trouve toujours rien.
j'oriente actuelement mes recherche sur les convertion en unicode (matière ou je ne suis pas a l'aise du tout) sans résultat...

si quelqun a une solution, je lui en serait infiniment reconnaissant
Commenter la réponse de cs_Kassidy
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 21 juil. 2007 à 16:11
0
Utile
merci mille fois!

je vais tester ça ( ca a lair tres prometteur)!
Commenter la réponse de cs_Kassidy
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 21 juil. 2007 à 16:23
0
Utile
Merci beaucoup!!

Avec cette connexion la :

string ConnexionBDD = "Database=MaBDD;Data source=1xx.x.xxx.xx;User Id=root;Password=;charset=utf8";

j'arrive a enregistrer correctement (bon quand je lis un enregistement ca me remet un carré mais il y a déja la moitier du boulot de fait !!!)
Commenter la réponse de cs_Kassidy
cs_fastflood 8 Messages postés lundi 17 novembre 2008Date d'inscription 17 juillet 2009 Dernière intervention - 18 nov. 2008 à 11:27
0
Utile
Bonjour,


Je déterre ce topic mais je viens d'avoir le même problème, et j'ai trouvé l'explication et une solution. Et c'est en partie grace à ce topic qui m'a mis sur la bonne piste !
Il s'agit effectivement d'un problème d'encodage :
  - .Net utilise UTF-16
  - MySQL utilise latin1 par défaut


La solution la plus évidente qui vient à l'esprit serait d'utiliser le même jeu de caractères. Possible dans la version 6 (sinon dans la version 5 MySQL propose un jeu de caractère presque identique à UTF-16 : UCS2). Néanmoins ça ne solutionne pas le problème car MySQL n'accepte qu'un nombre limité de jeux de caractères pour les clients qui se connectent au SGBD (apparamment c'est un choix pour éviter d'avoir une interface énorme qui propose tous les jeux de caractères) et il n'y a ni UTF16, ni UCS2 !
De plus, ce n'est parfois pas possible (la base ne vous appartient pas, problèmes avec d'autres applications, ...).


Il faut donc passer par une conversion lorsque la requête est envoyée à MySQL et une autre conversion lorsque MySQL renvoie les résultats :
 - En mettant dans la chaîne de connexion "charset=utf8" comme tu as fais, on a le bon caractère dans la base car MySQL a fait la conversion UTF8 à latin1. On peut aussi envoyer au préalable la requête "SET NAMES=UTF8" ou l'indiquer dans le fichier de config de MySQL si c'est permanent.
 - Par contre on a toujours un mauvais caractère dans l'application : c'est normal car MySQL retourne les résultats dans le jeu de caractères utilisé pour les données retournées : il faut donc faire la conversion dans l'autre sens. Soit on la fait dans l'application en utilisant les fonctions d'encodage de .Net, soit plus simplement directement par MySQL en faisant la conversion explicitement dans la requête "SELECT CONV(colonne USING utf8) FROM..."


Il reste une question que je me pose : pourquoi ça marche ?!!
Effectivement, vu que .Net stocke les données en UTF-16, le fait de mettre charset=utf8 n'est pas très cohérent. J'ai plusieurs pistes mais je n'ai réussi à n'en valider aucune :
  - soit j'ai de la chance : ça marche avec les caractères que j'utilise
  - soit uft8 est un sous-ensemble de utf16
  - soit le connecteur .Net fait lui même la conversion UTF-16 -> UTF8


Je pencherai plutôt pour la dernière explication, mais dans le doute, il faut peut être mieux explicitement faire une conversion des chaînes passées à MySQL avec les fonctions d'encodage de .Net
Commenter la réponse de cs_fastflood
abaudouin84 10 Messages postés lundi 16 mars 2009Date d'inscription 3 novembre 2009 Dernière intervention - 30 avril 2009 à 19:09
0
Utile
Comme j'ai été confronté au problème récemment, et que j'ai trouvé la solution, je réponds à ce message des fois que quelqu'un tombe sur ce problème.

J'ai beaucoup cherché, j'ai trouvé des solutions de psychopathes, c'est vraiment le cas de le dire, qui transforme les données qui proviennent/vont vers MySQL ...

En fait c'est vraiment tout simple :
- côté ASP.net, il faut que tout le site soit en UTF8 (paramètre globalization dans web.config et META).
- côté MySQL 5, il faut fixer le charset de l'ensemble de ses tables en ut8

si vos tables sont déjà faites, vous pouvez le changer à la volée en utilisateur la commande :
ALTER TABLE XXX CONVERT TO CHARACTER SET utf8
Commenter la réponse de abaudouin84

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.