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 :

Appli c# lecture base SQlite : lettres accentuées mal affichées


Sujet :

SQLite

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Points : 175
    Points
    175
    Par défaut Appli c# lecture base SQlite : lettres accentuées mal affichées
    Bonjour,
    Cette question revient souvent mais après 8 heures de recherche je n'ai toujours pas trouvé de réponse.
    Je lis en C# 1 base SQLite qui n'est pas créée par moi et que je ne peut pas modifier.
    Quand je visualise les données avec 1 editeur SQLite (SQLiteAdmin.exe par exemple) les caractères accentués sont corrects.

    J'ai écrit 1 appli C#qui utilise la Dll System.Data.SQLite et 1 DataReader.
    Les caractères accentués sont mal affichés : j'ai 1 "?" (valeur 65533) au lieu du "é".

    Je me doute qui faut faire 1 conversion avec du System.Encoding mais je ne trouve pas le bon format.
    Merci pour votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    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 : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    SQLITE ne gère aucune conversion ni aucun encodage.

    Donc ce que tu obtiens c'est ce que l'application a mis dans la base avec exactement le même encodage que celui de l'application source.

    Je ne connais pas ton application source ni C# mais tu dois avoir un codage qui te permettra cette transformation.

    Cependant si ce que tu vois avec SQLITEAdministrator est bon, alors la source devrait être ANSI Windows.



    Cordialement

  3. #3
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Points : 175
    Points
    175
    Par défaut
    Le fruit de mes dernières recherches :

    Il semble que les données dans cette base soient au format ANSI.

    Lecture à l'aide d'un browser :
    - SqLiteAdmin.exe affiche correctement les données : elles sont donc correctes dans la base et cet utilitaire ancien doit être resté au format ANSI.
    - D'autres logiciels plus récents les affichent mal comme avec la Dll.
    ...cela confirme quand même qu'il est potentiellement possible de lire la donnée et de la convertir au bon format.

    Lecture avec System.Data.Sqlite.Dll :
    - tous les caractères accentués (quels qu'ils soient) sont transformés en (char)65533, je ne peut donc plus les traduire.
    - j'utilise la dernière Dll system.data.sqlite v 1.0.94, mais j'ai aussi essayé avec d'autres versions.

    Il faudrait donc que je puisse lire les données en précisant à la Dll que c'est du format Ansi, mais ça n'est visiblement pas possible.
    J'aurais aimé qu'il y ait 1 fonction pour lire les données sous forme de tableau de char sans conversion pour pouvoir le traduire moi-même, mais je n'ai pas non plus trouvé.

    si quelqu'un a 1 idée, je suis preneur...

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    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 : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    Donc il semble que tes interfaces (et à mon avis le datareader plus que la DLL soient en cause)

    Dans ce cas, tu vas devoir faire la conversion via le SQL qui lit les données de ta base.

    Ce qui peut fonctionner c'est
    * un cast vers un type Blob (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cast(<Colonne> as blob)
    si ton reader accepte de t'en transmettre le contenu car la gestion des blobs est assez particulière.
    * Une transformation en hexadécimal qui te donnera une chaine de caractères hexadécimale (exemple
    Algérie => 416C67E9726965
    )

    Une autre piste (mais plus complexe) serait de définir une fonction qui ferait la trans-codification dans SQLITE (https://www.sqlite.org/c3ref/create_function.html) si ton langage te permets de mettre en place des callback pour la DLL écrite en C

    Cordialement

  5. #5
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Points : 175
    Points
    175
    Par défaut
    Merci Acaunes pour ton aide.
    Le Datareader est celui de la Dll, le SqLiteDataReader.
    J'ai essayé le cast mais ça ne marche pas : il refuse de caster en Binary un champ texte.

    La dernière solution est un peu trop complexe pour moi, je vais jeter l'éponge.
    Merci.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    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 : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    Pour autant que je sache le datareader est celui fourni par la couche ADO du C# qui se positionne entre la DLL et ton application.

    Pour le cast l'exemple que je t'ai donné est parfaitement fonctionnel, il te faut l'adapter à tao problème (mais SQLITE ne reconnais pas binary il ne reconnait que BLOB)

    Para ailleurs as tu regardé toutes les méthodes des datareader de type getasxxx je penses que l'on doit en trouver une qui ne fait pas de transcodification.

    Cordialement

Discussions similaires

  1. Erreur lecture base SQLite
    Par theo16 dans le forum SQLite
    Réponses: 5
    Dernier message: 03/03/2015, 17h57
  2. Exportez base sqlite de l'appli
    Par AmeryCourtz dans le forum Android
    Réponses: 0
    Dernier message: 29/10/2014, 11h44
  3. Base SQLite en lecture seule comme ressource
    Par RaphAstronome dans le forum Android
    Réponses: 1
    Dernier message: 01/11/2011, 11h59
  4. Partager une même base sqlite entre plusieurs applis
    Par Tiberizz dans le forum SQLite
    Réponses: 2
    Dernier message: 12/11/2009, 22h19
  5. Quel Outil pour les applis Industrielles ET bases de données
    Par ThierryAIM dans le forum Débats sur le développement - Le Best Of
    Réponses: 8
    Dernier message: 23/04/2003, 09h14

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