Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour,
je me permet de poster ici car je suis confronté à un problème assez embêtant et malheureusement la fonction recherche du forum ne m'a pas aidé, tout comme l'aide Sybase (j'utilise PB 10.5.2). Je m'explique.
Générant des fichiers XML grâce à l'export de datastore mais aussi grâce à l'objet PBDOM (la solution avait d'ailleurs été trouvée sur ce forum, encore merci), PowerBuilder rajoute automatiquement en début de fichier un code correspondant à l'encodage utilisé. Pour ceux qui ne connaissent pas, voir le lien suivant :
http://unicode.org/faq/utf_bom.html#BOM
Le problème est que le programme qui lit les fichiers générés remarque ces caractères spéciaux et rejette mon document...et bien sur je n'ai pas la main desssus. En plus c'est assez vicieux car beaucoup de programme ne l'affiche pas, tout du moins par défaut (genre WordPad, UltraEdit, etc...).
Ma question est donc : est-il possible de forcer PowerBuilder à ne pas mettre ce code au début du document ? Si oui, comment ?
Merci par avance pour vos réponses.
Cordialement, Adrien.
Dernière modification par Adrien (20-06-2008 09:46:28)
Hors ligne
Bonjour,
N'étant pas passé par le forum depuis un bout de temps, j'en profite pour poster la solution que j'ai mise en oeuvre pour contrer ce problème, avec ma fonction d'écriture de fichier XML :
Integer li_FileNum Long ll_nbBitsWritten Blob lblb_TemporaryBinaryObject //Définition de l'entête du XML (dont l'encodage utilisé : sans BOM car ANSI, contrairement à l'UNICODE) is_XML_Meta = "<?xml version='1.0' encoding='windows-1252' standalone='no'?>" //On converti la chaîne dans un 'Large Binary Object' encodé en ANSI, donc sans BOM lblb_TemporaryBinaryObject = Blob(is_XML_Meta + is_un_flux_xml, EncodingANSI!) //On désigne le fichier dans lequel il faut écrire, et on paramètre l'écriture pour replacer le précédent fichier (au cas où) li_FileNum = FileOpen(as_physical_location + as_document_id, TextMode!, Write!, Shared!, Replace!) //On lance l'écriture du fichier et on récupère le nombre de bit écrit, si il est égal à -1 c'est que l'écriture a raté ll_nbBitsWritten = FileWriteEx(li_FileNum, lblb_TemporaryBinaryObject) //On retourne un code de succès si le nombre de bit écrit ne correspond pas à un code d'erreur RETURN (ll_nbBitsWritten <> -1)
Et voila cette solution est parfaite et consomme moins de ressource que PBDOM, à bon entendeur ;).
A bientôt.
Hors ligne
Merci pour ce bout de code
Hors ligne
+10000
Hors ligne
Pages: 1