Problème caractères unicodes

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Problème caractères unicodes

Message 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
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Problème caractères unicodes

Message par Micoute »

Bonsoir omega, moi je décoche l'option "Activer le support Unicode" et ça fonctionne très bien !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème caractères unicodes

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème caractères unicodes

Message 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
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème caractères unicodes

Message par falsam »

Voila qui est étrange. Quelle version de Purebasic ? et quel systeme d'exploitation ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Problème caractères unicodes

Message 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

Code : Tout sélectionner

Produit : Règle P.U. : 10
Produit : Poêle P.U. : 9
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème caractères unicodes

Message par falsam »

Merci Marc56 pour ce test.
Oops j'ai oublié de remercier Spock pour son feedback :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème caractères unicodes

Message par omega »

Voila qui est étrange. Quelle version de Purebasic ? et quel systeme d'exploitation ?
Pb4.32
Win7
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème caractères unicodes

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème caractères unicodes

Message par omega »

Pardon

Pb4.20
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème caractères unicodes

Message par falsam »

omega a écrit :Pardon Pb4.20
Version de 2008. Je charge et j'essaye.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème caractères unicodes

Message 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 :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème caractères unicodes

Message 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:

Code : Tout sélectionner

OpenDatabase(#DataBase, ":memory:", "", "")


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?

Code : Tout sélectionner

ReqSql + Chr(34) + 10 + Chr(34)+")"               ;Montant
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?
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème caractères unicodes

Message 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 :wink:
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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème caractères unicodes

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre