Document xml UTF-8 avec SAX et sans BOM

Hoy,

Comment on fait un document xml SAX encodé en UTF-8 mais sans BOM ?

Bonjour,

Il est gros comment ton document ?

J’ai du code pour supprimer un BOM d’un blob

: Bruno LEGAY

Bonjour,

Il est gros comment ton document ?

J’ai du code pour supprimer un BOM d’un blob

Aucune idée de la taille car c’est un fichier SEPA.

SEPA n’acceptant pas les caractères UTF-8, j’ai écris :

		<code 4D>

SAX SET XML DECLARATION($H_Doc;“iso-8859-1”;True)
</code 4D>

Du coup plus de BOM.

Ton code marcherait avec des commandes SAX ?

Comment on fait un document xml SAX encodé en UTF-8 mais sans BOM ?
SEPA n’acceptant pas les caractères UTF-8, j’ai écris :
[…]“iso-8859-1” […] Du coup plus de BOM.
Je ne pige pas, là : ton dernier message résout le 1er, non ?

: Arnaud DE MONTARD

Je ne pige pas, là : ton dernier message résout le 1er, non ?
Oui, à ma connaissance la BOM c’est uniquement en UTF-x

Si SEPA veut un format autre que utf-x et que cet autre ne produit pas de BOM, ton problème est résolu.

Je viens de relire la doc : Le fichier peut être en UTF-8 mais les banques françaises se limitent au jeu de caractères latins, composé de :
a b c de fgh i j k l m n op q r s t u vw x yz
A B C D E FG H I J K L M N O P Q R S T U V W X Y Z
0123456789 / -? :frowning: ) . , ’+ Espace

Bonjour,

Contacte moi en privé, j’ai du code de génération de fichier SEPA (pour faire des virements).
C’est écrit en DOM.

Généralement, les fichiers SEPA ne sont pas très gros, donc le DOM va très bien.

Avec DOM quand tu fais un DOM EXPORTER VERS VARIABLE avec une variable blob, tu n’as pas de BOM.

<code 4D>
DOM EXPORTER VERS VARIABLE($va_rootDomRef;$vx_xml)
</code 4D>

En ce qui concerne les caractères et le jeu de caractère xml, normalement, un parseur xml bien écrit est capable de lire n’importe quel fichier quel que soit sont “encoding”.
C’est sûr que si tu mets un “encoding” ISO-8859-1" il y a peu de chance d’avoir des caractères exotiques par définition (symbole euro ?).
Mais l’encoding ne doit pas servir à définir les filtres. C’est ton code qui doit filtrer les informations envoyées dans le fichier (avant d’écrire les données dans l’élément).

Sinon, je te recommande fortement de valider tes fichiers SEPA produits avec les xsd fournies. Les xsd contiennent normalement les caractères acceptés pour chaque élément. Si ton fichier passe la validation SEPA, il ne pourra pas être refusé par la banque pour cause de fichier “mal construit”.

On utilise le SEPA en production depuis 2 ans et ça marche nickel (déclenchement de virement de compte à compte).

HTH

you can fool SAX commands by mixing standard packet commands.

$path:=System folder(Desktop)+“test.xml”
$docRef:=Create document($path)

SAX SET XML DECLARATION($DocRef;“utf-8”;True)
SET DOCUMENT POSITION($docRef;0)
SEND PACKET($docRef;"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>")
SAX OPEN XML ELEMENT($docRef;“elem”)
SAX ADD XML ELEMENT VALUE($docRef;“value”)
SAX CLOSE XML ELEMENT($docRef)

CLOSE DOCUMENT($docRef)

see

https://doc.4d.com/4Dv17/4D/17/Overview-of-XML-SAX-Commands.300-3729828.en.html

Hi Miyako,

I don’t this is the best approach and moving document position in a SAX context is dangerous.

For a start, the code you suggest creates a not well formed xml.
Because the xml content is so short (because of the demo) the xml header is not totally overwritten :frowning:

not well formed xml :

value
0" encoding=“utf-8”?>

But my concern is that you will produce an xml without the header (<?xml version="1.0" encoding="utf-8"?>).

The result is a well formed xml but I think you loose valid information with the missing header and can be a source of interoperability problem. The result (xml without header) may be worse than the problem you are trying to fix (xml without bom).

xml without header/declaration (ok but not great) :

value

This is what an xml should look like in my view.

xml with header/declaration (better) :

<?xml version="1.0" encoding="utf-8"?>

value

PS : you can vote for this https://forums.4d.com/Post/FR/29721492/1/29768128#29768128feature request> :wink:

Thanks