Page 1 sur 1
Problème caractères unicodes
Publié : ven. 19/févr./2016 20:32
par omega
Bonsoir,
Je viens de me rendre compte que le contenu de ma table produits (base sqlite) contient des enregistrements formés par des caractères bizarres (en tout cas NON utf8). J'ai sélectionné le code UTF 8 et j'ai recompilé. Toujours le même résultat.
Exemple: au lieu de (caractère), c'est (caract) + une lettre bizarre +(re), tous les caractères accentués sont remplacés.
Une idée??
Merci
Re: Problème caractères unicodes
Publié : ven. 19/févr./2016 20:37
par Micoute
Bonsoir omega, moi je décoche l'option "Activer le support Unicode" et ça fonctionne très bien !
Re: Problème caractères unicodes
Publié : ven. 19/févr./2016 22:36
par falsam
Support unicode ou pas dans les options de compilation je n'ai pas de souci avec les accents.
Omega pourrais tu tester ce code et dire si tu vois bien les accents ou pas. ? (
D'autres peuvent faire également ce test. Merci.)
Code : Tout sélectionner
Enumeration
#DataBase
EndEnumeration
UseSQLiteDatabase()
Global ReqSql.s
;Création d'une base de donnée en mémoire
OpenDatabase(#DataBase, ":memory:", "", "")
;Creation de la table produits (trés simplifié)
ReqSql = "CREATE TABLE Produits ("
ReqSql + "idauto INTEGER PRIMARY KEY," ;Identification auto
ReqSql + "nom TEXTE," ;Nom du produit
ReqSql + "pu INTEGER" ;Prix unitaire
ReqSql + ");"
DatabaseUpdate(#DataBase, ReqSql)
Debug DatabaseError()
;Ajout de deux produits
ReqSql = "INSERT INTO produits (nom, pu) values ("
ReqSql + Chr(34) + "Règle" + Chr(34)+Chr(44) ;Nom du produit
ReqSql + Chr(34) + 10 + Chr(34)+")" ;Montant
DatabaseUpdate(#Database, ReqSql)
ReqSql = "INSERT INTO produits (nom, pu) values ("
ReqSql + Chr(34) + "Poêle" + Chr(34)+Chr(44) ;Nom du produit
ReqSql + Chr(34) + 9 + Chr(34)+")" ;Montant
DatabaseUpdate(#Database, ReqSql)
;Liste des produits
ReqSql = "SELECT nom, pu FROM produits"
DatabaseQuery(#Database, ReqSql)
While NextDatabaseRow(#Database)
Debug "Produit : " + GetDatabaseString(#Database, 0) + " P.U. : " + Str(GetDatabaseLong(#Database, 1))
Wend
Précisez également la version de Purebasic et l'OS. Merci.
Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 18:04
par omega
Bonjour
J'ai testé ton code falsam, voila le résultat:
- Produit : Règle P.U. : 10
Produit : Poêle P.U. : 9
Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 18:06
par falsam
Voila qui est étrange. Quelle version de Purebasic ? et quel systeme d'exploitation ?
Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 18:11
par Marc56
Windows 10 x64 - PB x64 5.42 B3 LTS avec ou sans support unicode = OK
Windows XP Pro dans VM (VirtualBox 5) - PB 5.41 LTS avec ou sans support unicode = OK
Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 18:16
par falsam
Merci Marc56 pour ce test.
Oops j'ai oublié de remercier Spock pour son feedback

Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 18:40
par omega
Voila qui est étrange. Quelle version de Purebasic ? et quel systeme d'exploitation ?
Pb4.32
Win7
Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 18:45
par falsam
omega a écrit :Pb4.32
Tu es certain de cette version ? Elle n'existe pas dans les archives de Purebasic.
Pour info la version en cours est la version 5.40 LTS.
Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 18:49
par omega
Pardon
Pb4.20
Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 18:52
par falsam
omega a écrit :Pardon Pb4.20
Version de 2008. Je charge et j'essaye.
Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 18:58
par falsam
Effectivement il y a un souci avec cette version 4.20.
Dans les options de compilation (Menu Compilateur -> Options du compilateur) tu coches
Activé le support Unicode.
Le souci sera résolu.
Pense à passer à la version 5.40. Les mise à jours sont gratuites avec PureBasic

Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 19:40
par omega
J'ai coché l'option (activer la gestion unicode), et ça marche à présent.
Merci
Cependant, j'ai quelques questions et remarques sur ton code:
1. C'est la première fois que je vois ça (base de données en mémoire) mais où se trouve le nom de la base ?
Est ce que le nom est facultatif? Si par exemple je veux créer 2 bases de données en mémoire, comment les différencier dans ce cas?
2. Cette ligne de code n'a pas marché à mon niveau, il a fallu remplacer 10 par une chaîne "10" (la même chose pour le 9)
3. Comment localiser physiquement la base en mémoire ? en utilisant par exemple un visual sqlite commednt indiquer le chemin de la table à consulter?
Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 19:50
par falsam
omega a écrit :J'ai coché l'option (activer la gestion unicode), et ça marche à présent.
Bonne nouvelle.
omega a écrit : C'est la première fois que je vois ça (base de données en mémoire) mais oe trouve le nom de la base ?
Nul part dans cet exemple.
omega a écrit :Est ce que le nom est facultatif?
Oui
omega a écrit :Si par exemple je veux créer 2 bases de données en mémoire, comment les différencier dans ce cas?
Faut que je teste
falsam a écrit :Cette ligne de code n'a pas marché à mon niveau, il a fallu remplacer 10 par une chaîne "10" (la même chose pour le 9)
.C'est ce que j'ai du faire avec la version 4.20 de PureBasic. Par contre c'est inutile avec la dernière version.
omega a écrit :Comment localiser physiquement la base en mémoire ? en utilisant par exemple un visual sqlite commednt indiquer le chemin de la table à consulter?
Pour moi ce n'est pas possible.
Re: Problème caractères unicodes
Publié : sam. 20/févr./2016 20:03
par falsam
Deux bases de données SQLite en mémoires
Code : Tout sélectionner
Enumeration
#DataBase1
#Database2
EndEnumeration
UseSQLiteDatabase()
Global ReqSql.s
;- Création de la base de données 1 en mémoire
OpenDatabase(#DataBase1, ":memory:", "", "")
;Creation de la table produits (trés simplifié)
ReqSql = "CREATE TABLE Produits ("
ReqSql + "idauto INTEGER PRIMARY KEY," ;Identification auto
ReqSql + "nom TEXTE," ;Nom du produit
ReqSql + "pu INTEGER" ;Prix unitaire
ReqSql + ");"
DatabaseUpdate(#DataBase1, ReqSql)
;Ajout de deux produits
ReqSql = "INSERT INTO produits (nom, pu) values ("
ReqSql + Chr(34) + "Règle" + Chr(34)+Chr(44) ;Nom du produit
ReqSql + Chr(34) + 10 + Chr(34)+")" ;Montant
DatabaseUpdate(#Database1, ReqSql)
ReqSql = "INSERT INTO produits (nom, pu) values ("
ReqSql + Chr(34) + "Poêle" + Chr(34)+Chr(44) ;Nom du produit
ReqSql + Chr(34) + 9 + Chr(34)+")" ;Montant
DatabaseUpdate(#Database1, ReqSql)
;- Création de la base de données 2 en mémoire
OpenDatabase(#DataBase2, ":memory:", "", "")
;Creation de la table produits (trés simplifié)
ReqSql = "CREATE TABLE Produits ("
ReqSql + "idauto INTEGER PRIMARY KEY," ;Identification auto
ReqSql + "nom TEXTE," ;Nom du produit
ReqSql + "pu INTEGER" ;Prix unitaire
ReqSql + ");"
DatabaseUpdate(#DataBase2, ReqSql)
;Ajout de deux produits
ReqSql = "INSERT INTO produits (nom, pu) values ("
ReqSql + Chr(34) + "PureBasic" + Chr(34)+Chr(44) ;Nom du produit
ReqSql + Chr(34) + 79 + Chr(34)+")" ;Montant
DatabaseUpdate(#Database2, ReqSql)
ReqSql = "INSERT INTO produits (nom, pu) values ("
ReqSql + Chr(34) + "SpiderBasic" + Chr(34)+Chr(44) ;Nom du produit
ReqSql + Chr(34) + 49 + Chr(34)+")" ;Montant
DatabaseUpdate(#Database2, ReqSql)
;-Liste des produits base de donnée 1
ReqSql = "SELECT nom, pu FROM produits"
DatabaseQuery(#Database1, ReqSql)
Debug "Liste produits #database1"
While NextDatabaseRow(#Database1)
Debug "Produit : " + GetDatabaseString(#Database1, 0) + " P.U. : " + Str(GetDatabaseLong(#Database1, 1))
Wend
;-Liste des produits base de donnée 1
ReqSql = "SELECT nom, pu FROM produits"
DatabaseQuery(#Database2, ReqSql)
Debug "Liste produits #database2"
While NextDatabaseRow(#Database2)
Debug "Produit : " + GetDatabaseString(#Database2, 0) + " P.U. : " + Str(GetDatabaseLong(#Database2, 1))
Wend