IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Problème d'encodage entre C++ et C#


Sujet :

SQLite

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Par défaut Problème d'encodage entre C++ et C#
    Bonjour,
    Je développe un projet utilisant une base sqlite. Ce fichier sera utilisé à la fois depuis une application C++ et d'autre part depuis une application C#.

    Cependant après de nombreuses tentatives, je fais face à de gros problèmes d'encodage. Lorsque je fais un insert suivi d'un select en C++, pas de soucis je récupère correctement les accents. De même en C# j'insère une ligne puis la sélectionne et mes accents sont toujours bon.

    En revanche, dès que je passe d'un projet à l'autre le "é" est transformé en "?" ou "é". Les types de champs sont pour la plupart des NVARCHAR.

    Comment puis-je résoudre ce problème ?

    Merci par avance

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 458
    Par défaut
    Bonjour,

    Sqlite ne gère pas les encodages. Tu vas devoir choisir un codage pour tes données (à première vue, un des langages travaille en ansi et l'autre en UTF8).
    Un fois ce codage choisi, il te faut transcoder les données dans celui qui ne gère pas le code choisi. Cherches du côté des fonction de type ansitoutf ou utftoansi selon le sens que tu choisiras.

    Cordialement

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Par défaut
    Merci pour ta réponse, j'en suis arrivé au même constat que toi. En c# j'arrive à obtenir la même chose que ce que je lis en C#:

    "clé" devient "cl�" avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes("clé"));

    Mais impossible d'effectuer l'opération inverse:
    "clé" devient "cl�" au lieu de "clé"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Encoding.GetEncoding("iso-8859-1").GetString(Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes("clé"))));

    Même si cela me gêne un peu de le faire côté C++ j'ai trouvé les méthodes utilitaires suivantes qui me permettent d'assurer l'interopérabilité entre C# et C++:
    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
    char * ANSIToUTF8(char * pszCode)
    {
    	int		nLength, nLength2;
    	BSTR	bstrCode; 
    	char	*pszUTFCode = NULL;
     
    	nLength = MultiByteToWideChar(CP_ACP, 0, pszCode, lstrlen(pszCode), NULL, NULL); 
    	bstrCode = SysAllocStringLen(NULL, nLength); 
    	MultiByteToWideChar(CP_ACP, 0, pszCode, lstrlen(pszCode), bstrCode, nLength);
     
     
    	nLength2 = WideCharToMultiByte(CP_UTF8, 0, bstrCode, -1, pszUTFCode, 0, NULL, NULL); 
    	pszUTFCode = (char*)malloc(nLength2+1); 
    	WideCharToMultiByte(CP_UTF8, 0, bstrCode, -1, pszUTFCode, nLength2, NULL, NULL); 
     
    	return pszUTFCode;
    }
     
    char* UTF8ToANSI(char *pszCode)
    {
     
     
    	BSTR    bstrWide;
    	char*   pszAnsi;
    	int     nLength;
     
    	nLength = MultiByteToWideChar(CP_UTF8, 0, pszCode, lstrlen(pszCode) + 1, NULL, NULL);
    	bstrWide = SysAllocStringLen(NULL, nLength);
     
    	MultiByteToWideChar(CP_UTF8, 0, pszCode, lstrlen(pszCode) + 1, bstrWide, nLength);
     
    	nLength = WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, NULL, 0, NULL, NULL);
    	pszAnsi = new char[nLength];
     
    	WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, pszAnsi, nLength, NULL, NULL);
    	SysFreeString(bstrWide);
    	return pszAnsi;
    }

Discussions similaires

  1. [MySQL] Problème encodage ├® entre utf8 et source inconnue ( client )
    Par Ben_74 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/02/2015, 19h53
  2. Problème d'encodage entre C# et servlet tomcat
    Par Treuze dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 16/02/2011, 12h25
  3. Problème d'encodage des entrées de formulaire
    Par verbose dans le forum Struts 1
    Réponses: 2
    Dernier message: 04/07/2008, 14h36
  4. Réponses: 2
    Dernier message: 21/10/2004, 15h08
  5. Problèmes de compatibilité entre sdk 9.0c et geforce 2/4
    Par Francky033 dans le forum DirectX
    Réponses: 2
    Dernier message: 01/10/2004, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo