1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Conversion caractères spéciaux base DBF

Discussion dans 'Windev' créé par fr85, Sept 26, 2020.

  1. fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    123
    J'aime reçus:
    7
    Bonjour,

    Je rencontre un problème de conversion de caractère accentué provenant d'une chaine depuis un champ de ma base DBF. A ce que j'ai compris la base est encodée en charset 8859-1.

    J'ai tout tenté dans windev avec chaineversutf8 et tout un tas de chose mais rien à savoir je n'obtoens pas les accents correctements à l'affichage des données provenant de cette table DBF.

    Si par hasard vous avez une solution ou piste à m'indiquer je suis preneur.

    Je vous remercie d'avance pour votre aide ! ;)
     
    Tags:
  2. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    2,882
    J'aime reçus:
    1,532

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    ,
    La première question a se poser est :
    A quoi correspond le charset 8859-1
    Voir

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Et

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    C'est donc de l'ascii avec quelques caractères accentués.
    Voici 2 fonctions pour l'ascii dans windev

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Et

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Dans l'aide il est aussi écrit que l'ANSI
    Contient l'ascii
    On peut donc en déduire que l'on peut essayer les fonctions sur l'ANSI

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Mais wikipédia indiqué que les langues qui utilise ce Charest sont:
    allemand, anglais, basque, catalan, danois, espagnol, italien, néerlandais, norvégien, portugais et suédois, Afrikaans, féroïen, flamand, islandais, irlandais, latin (parmi d'autres langues européennes). Support partiel du français et du finnois.
    Donc on peut essayer les divers alphabet de windev

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Avec la fonction

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
  3. fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    123
    J'aime reçus:
    7
    J'avoue que je n'ai pas compris toute tes explications mais je suis toujours bloqué avec mes accents !

    J'ai tenté ansi vers unicode avec tous les alphabets rien n'y fait ! htmlverstexte aussi ! J'ai un Ú à la place d'un é et j'en passe pour tous les autres types d'accent !

    Je ne comprends pas trop comment faire ? Est ce que finalement ma base DBF n'est pas en iso8859-1, comment éventuellement convertir cette base.
     
  4. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    2,882
    J'aime reçus:
    1,532
    Le problème est qu'il faut être sur de l'encodage pour trouver la réponse.
    Vu que tu as essayé toutes les possibilités de ANSI vers unicode
    Et HTML vers texte
    Je te propose d'essayer

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    A condition que ton projet soit paramétré en ANSI
    Car selon wikipédia

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Est utilisé sous dos au début
    Mais pas sur que cela soit bon
    Car a partir de dbase V cela a été mis sous Windows
    Donc savoir sous quelle version de dbase
    A été créée ton fichier dbf pourrait t'aider.
     
  5. fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    123
    J'aime reçus:
    7
    Je n'obtiens rien avec cette fonction non plus.

    j'ai remarqué avec Open Office Calc en ouvrant ma base, les accents apparaissent quelque soit l'encodage ISO 8859-1 jusqu'à 8859-15 que je sélectionne


    Je ne sais pas comment faire avec cette information en plus ?!
     
  6. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    2,882
    J'aime reçus:
    1,532
    8859-15 c'est du latin ou pour pcsoft l'alphabet Europe de l'est.
    Mais vu que tu as essayé tous les alphabet, je ne sais pas.
    Question bête :
    tu te connectes comment a ta base dbf?
    C'est bien par odbc ?
    Connecteur natif ?
     
  7. Dandypunk

    Dandypunk Well-Known Member

    Inscrit:
    Nov 28, 2019
    Messages:
    550
    J'aime reçus:
    302
    Bonjour,

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    C'est bien par odbc ?
    Connecteur natif ?
    Cliquez pour agrandir...
    Pour le DBF, windev propose les fonctions HDBXXX
     
  • Dandypunk

    Dandypunk Well-Known Member

    Inscrit:
    Nov 28, 2019
    Messages:
    550
    J'aime reçus:
    302
    Si mes souvenir sont bons, le codepage se trouve dans un fichier *.cpg. Attention, il s'agit des

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    .
    Sinon on peut retrouver le CP dans le header du fichier *.dbf comme expliqué

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    123
    J'aime reçus:
    7

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Si mes souvenir sont bons, le codepage se trouve dans un fichier *.cpg. Attention, il s'agit des

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    .
    Sinon on peut retrouver le CP dans le header du fichier *.dbf comme expliqué

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Cliquez pour agrandir...
    Désolé mais la je suis un peu perdu quand même !

    Comment regarder le header d'un fichier DBF ?

    Une fois que l'on sait quel type de ISO8859, comment procédéer pour bien convertir les caractères avec windev ?

    Merci
     
  • Dandypunk

    Dandypunk Well-Known Member

    Inscrit:
    Nov 28, 2019
    Messages:
    550
    J'aime reçus:
    302

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Comment regarder le header d'un fichier DBF ?
    Cliquez pour agrandir...
    Il suffit de charger le fichier en tant que buffer et de lire le bon octet

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Une fois que l'on sait quel type de ISO8859, comment procédéer pour bien convertir les caractères avec windev ?
    Cliquez pour agrandir...
    Déjà récupère le code OEM on verra après. Ce problème survient souvent à cause du paramétrage initial de dBase. dBase travaille par défaut en avec un CP 437 alors que nous trvaillons en 850
     
  • Dandypunk

    Dandypunk Well-Known Member

    Inscrit:
    Nov 28, 2019
    Messages:
    550
    J'aime reçus:
    302
    Tu n'est pas obligé de charger entièrement le fichier, le header suffira
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    123
    J'aime reçus:
    7

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Tu n'est pas obligé de charger entièrement le fichier, le header suffira
    Cliquez pour agrandir...
    j’avoue que la, ça dépasse mes compétences !

    as tu un code à me fournir ou piste.

    j’ai chargé mon fichier DBF avec fchargebuffer et ensuite j’ai bien sûr des caractères incompréhensibles mais c’est là que je bloque comment juste charger le grader comme tu dis et comment lire le bon octet ? Merci.
     
  • Dandypunk

    Dandypunk Well-Known Member

    Inscrit:
    Nov 28, 2019
    Messages:
    550
    J'aime reçus:
    302
    fChargeBuffer est un bon début, mais il faut utiliser cette fonction "à fond".
    Dans la doc que je t'ai fournie, on voit que le header est sur 32 octets et que la langue se trouve à l'octet 29 (quelle que soit la version)
    Il suffit de lire cet octet :
    Code (Windev):

    nCodePage est entier

    nCodePage=

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sCheminEtNomFichier,29,1)

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    ("La fichier a été utilisé en utilisant le CodePage %1",nCodePage)
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    123
    J'aime reçus:
    7

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    fChargeBuffer est un bon début, mais il faut utiliser cette fonction "à fond".
    Dans la doc que je t'ai fournie, on voit que le header est sur 32 octets et que la langue se trouve à l'octet 29 (quelle que soit la version)
    Il suffit de lire cet octet :
    Code (Windev):

    nCodePage est entier

    nCodePage=

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sCheminEtNomFichier,29,1)

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    ("La fichier a été utilisé en utilisant le CodePage %1",nCodePage)
    Cliquez pour agrandir...

    J'ai une erreur avec ce code me disant qu'un buffer ne peut être convertit en entier. J'ai essayé avec chaine ou autre mais je n'arrive pas à obtenir l'information
     
  • Dandypunk

    Dandypunk Well-Known Member

    Inscrit:
    Nov 28, 2019
    Messages:
    550
    J'aime reçus:
    302
    Oops, j'ai oublié le Asc.
    Il faut lire
    Code (Windev):
    nCodePage=

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sCheminEtNomFichier,29,1))
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    123
    J'aime reçus:
    7
    Bon, je présume qu'il y a un poblème car j'obtiens 0 !
     
  • Dandypunk

    Dandypunk Well-Known Member

    Inscrit:
    Nov 28, 2019
    Messages:
    550
    J'aime reçus:
    302
    L'adresse commence à 0 et pas à 1, donc c'est 30. (adresse 29 donc 30° octet)
    Une lecture de la doc t'aurait permis de corriger facilement le problème. Là on vient de découvrir que le fichier n'était pas crypté.
    Tu peux aussi afficher le fichier grâce à un outils du style Total Commander.
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    123
    J'aime reçus:
    7

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    L'adresse commence à 0 et pas à 1, donc c'est 30. (adresse 29 donc 30° octet)
    Une lecture de la doc t'aurait permis de corriger facilement le problème. Là on vient de découvrir que le fichier n'était pas crypté.
    Tu peux aussi afficher le fichier grâce à un outils du style Total Commander.
    Cliquez pour agrandir...
    Bonjour.

    j’ai essayé de modifier mais j’obtiens toujours 0 comme si en fait il ne récupère rien non ?
     
  • fr85

    fr85 Member

    Inscrit:
    Mai 22, 2020
    Messages:
    123
    J'aime reçus:
    7

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    L'adresse commence à 0 et pas à 1, donc c'est 30. (adresse 29 donc 30° octet)
    Une lecture de la doc t'aurait permis de corriger facilement le problème. Là on vient de découvrir que le fichier n'était pas crypté.
    Tu peux aussi afficher le fichier grâce à un outils du style Total Commander.
    Cliquez pour agrandir...
    J'ai essayé cette ligne de code :

    [windev]

    Info(MonBuffer[[30]])

    [/windev] et j'obtiens une fenêtre vide, il y a donc un problème quelque part non ?
     
  • Dandypunk

    Dandypunk Well-Known Member

    Inscrit:
    Nov 28, 2019
    Messages:
    550
    J'aime reçus:
    302
    On veut un entier compris entre 0 et 255 et tu affiches un caractère. Etant donné que cet entier a de forte chance d'être 1 ou 2 (CP 437 ou CP 850) le caractère associé n'est pas visible.
     
  • Partager cette page

    Chargement...