Pas d'inquiétude, avec PBAdonf, c'est dans la poche ! ^^

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 17-05-2016 12:48:20

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Sauvegarde fichier avec Encodage UTF8 sans BOM

Bonjour,

Je dois modifier une application en PowerBuilder 10.5 : Sauvegarde d'un fichier au format CSV avec encodage UTF8 sans BOM.

Pour le moment de parviens à faire la sauvegarde en UTF8 mais avec BOM.

Existe-t-il une méthode afin de procéder à la sauvegarde de mon fichier avec encodage UTF8 sans BOM?

Merci


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#2 17-05-2016 12:56:16

FlorentP  
Membre Geek
Award: bf
Lieu: Marseille
Date d'inscription: 23-03-2011
Messages: 95
Pépites: 1,422
Banque: 0

Re: Sauvegarde fichier avec Encodage UTF8 sans BOM

le bom à l'air d'être des caractères supplémentaires rajoutés au début du fichier : https://en.wikipedia.org/wiki/Byte_order_mark

donc il suffirait de les effacer.

Hors ligne

 

#3 17-05-2016 13:00:19

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Re: Sauvegarde fichier avec Encodage UTF8 sans BOM

FlorentP a écrit:

le bom à l'air d'être des caractères supplémentaires rajoutés au début du fichier : https://en.wikipedia.org/wiki/Byte_order_mark

donc il suffirait de les effacer.

En effet, les trois premiers octets définissent le BOM.
Ma question : Comment les retirer sans compromettre l'intégrité du fichier et être certain que le fichier est en UTF8 sans BOM?


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#4 17-05-2016 20:12:49

FlorentP  
Membre Geek
Award: bf
Lieu: Marseille
Date d'inscription: 23-03-2011
Messages: 95
Pépites: 1,422
Banque: 0

Re: Sauvegarde fichier avec Encodage UTF8 sans BOM

tu ouvres ton fichier en mode StreamMode!  et tu recopies tout dans un second fichier à partir du 4 iéme octet par exemple.

Dernière modification par FlorentP (17-05-2016 20:14:19)

Hors ligne

 

#5 18-05-2016 12:36:44

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Re: Sauvegarde fichier avec Encodage UTF8 sans BOM

FlorentP a écrit:

tu ouvres ton fichier en mode StreamMode!  et tu recopies tout dans un second fichier à partir du 4 iéme octet par exemple.

C'est exactement ce que j'ai fait :

1 - Ouverture du premier fichier ainsi 

Code:

 FileOpen(ls_nom_fic, LineMode!, Write!, LockWrite!, Replace!, EncodingUTF8!)

2 - Ecriture dans le fichier
3 - Fermeture du fichier
4 - Ouverture du fichier en StreamMode! avec mise en mémoire dans une variable blob - Fermeture du fichier
5 - Récupération des trois premiers octets dans tois variables différentes de type byte
6 - Test si les trois variables sont respectivement égales à 239, 187 et 181
7 - Dans ce cas le fichier est de type UTF8 avec BOM, on récupère le contenu de la variable blob à partir du 4ème caractère
8 - On ouvre le fichier en StreamMode! en réécrivant le contenu de la varaible blob par blocs de 32765 octets

Et cela fonctionne, quelle galère.


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#6 18-05-2016 13:31:14

cantin_jl  
Membre completement Geek
Lieu: 49120 Chemillé
Date d'inscription: 10-01-2007
Messages: 132
Pépites: 552
Banque: 0
Site web

Re: Sauvegarde fichier avec Encodage UTF8 sans BOM

cantin_jl a écrit:

FlorentP a écrit:

tu ouvres ton fichier en mode StreamMode!  et tu recopies tout dans un second fichier à partir du 4 iéme octet par exemple.

[RESOLU]  C'est exactement ce que j'ai fait :

1 - Ouverture du premier fichier ainsi 

Code:

 FileOpen(ls_nom_fic, LineMode!, Write!, LockWrite!, Replace!, EncodingUTF8!)

2 - Ecriture dans le fichier
3 - Fermeture du fichier
4 - Ouverture du fichier en StreamMode! avec mise en mémoire dans une variable blob - Fermeture du fichier
5 - Récupération des trois premiers octets dans tois variables différentes de type byte
6 - Test si les trois variables sont respectivement égales à 239, 187 et 181
7 - Dans ce cas le fichier est de type UTF8 avec BOM, on récupère le contenu de la variable blob à partir du 4ème caractère
8 - On ouvre le fichier en StreamMode! en réécrivant le contenu de la varaible blob par blocs de 32765 octets

Et cela fonctionne, quelle galère.


Les inventions qui ne sont pas connues ont toujours plus de censeurs que d'approbateurs

Hors ligne

 

#7 18-05-2016 19:20:44

FlorentP  
Membre Geek
Award: bf
Lieu: Marseille
Date d'inscription: 23-03-2011
Messages: 95
Pépites: 1,422
Banque: 0

Re: Sauvegarde fichier avec Encodage UTF8 sans BOM

cantin_jl a écrit:

Et cela fonctionne, quelle galère.

C'est la toute la beauté de la chose.

Hors ligne

 

#8 18-05-2016 22:18:55

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Sauvegarde fichier avec Encodage UTF8 sans BOM

FlorentP a écrit:

tu ouvres ton fichier en mode StreamMode!  et tu recopies tout dans un second fichier à partir du 4 iéme octet par exemple.

Tant qu'à faire, si le contenu du fichier est disponible dans une string, autant ouvrir le fichier résultat en StreamMode!, et écrire dedans un blob qui sera au bon format, un prototype FileWrite() supporte l'écriture de blob, et on peut convertir une string en blob en précisant l'encodage, le bom n'est pas inclus.

En gros:

Code: pb

int li_file
blob lbl_data
li_file = FileOpen(ls_nom_fic, streamMode!, Write!, LockWrite!, Replace!)
lbl_data = blob(ls_content, EncodingUtf8!)
FileWrite(li_file, lbl_data)
FileClose(li_file)


Code non testé, je n'ai pas de PB sous la main au moment où j'écris ça...

Bon, si l'écriture dans le fichier se fait en plusieurs fois, c'est un autre problème.

Pour ce qui est des BOMs (utf16 et utf8) c'est simple : PB ne sait pas gérer autrement les fichiers non "ansi" (= différents du code natif local de l'OS) si il ne sont pas présents, PB suppose toujours que le fichier est en encodingAnsi! en lecture, et il ajout automatiquement le BOM en écriture pour les utf...


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22