Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Documents pareils
Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Optimisation de 4D Server et 4D Web Server. Résumé. 4D Notes techniques

4e Dimension Clés XML Backup. Windows /Mac OS 4e Dimension D SA. Tous droits réservés.

Jeux de caracte res et encodage (par Michel Michaud 2014)

Structure du format BMP, sa lecture, sa construction et son écriture

Comment utiliser FileMaker Pro avec Microsoft Office

Fonctions pour la Suisse

Single User. Guide d Installation

Créer un fichier PDF/A DÉPÔT ÉLECTRONIQUE

4D v12. Mise à jour Windows /Mac OS. 4D D SAS. Tous droits réservés.

Comment générer un fichier PDF de qualité et certifié imprimable?

Manuel Utilisateur Version 1.6 Décembre 2001

Logiciel (Système d impression directe)

4D v11 SQL. Mise à jour Windows /Mac OS. 4D D SAS. Tous droits réservés.

TP Codage numérique des caractères. Un ordinateur ne manipule que des 0 et des 1 : Comment alors code-t-il du texte?

Architecture des ordinateurs Introduction à l informatique

E.N.T. Espace Numérique de Travail

Installation du Pilote de scanner

Guide de prise en main Symantec Protection Center 2.1

Service d information pour remise de paiement de factures Scotia

AssetCenter Notes de version

ETI/Domo. Français. ETI-Domo Config FR

Guide de l utilisateur

Fonctions pour la France

Q. A quels produits s adresse ce document?

Bases de programmation. Cours 5. Structurer les données

4D v11 SQL Release 5 (11.5) ADDENDUM

MailStore Server 7 Caractéristiques techniques

Nokia Internet Modem Guide de l utilisateur

v7.1 SP2 Guide des Nouveautés

CA Desktop Migration Manager

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

Nécessité de concevoir un outil de recherche PDF Présentation des fonctionnalités d'indexation et de recherche... 3

Manuel d utilisation du logiciel Signexpert Paraph

Le codage informatique

Altiris Helpdesk Solution 6.0 SP4 - Aide

Conditions d utilisation du site fim@ktabati d Algérie Télécom

Méthode de préparation du fichier texte d import depuis Excel, via Access jusqu à Drupal.

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Exportation d'une VM sur un périphérique de stockage de masse USB

Demande d assistance : ecentral.graphics.kodak.com. Variable Data Print est désormais une option sous licence de InSite Storefront 6.0.

Utilisation de l ordinateur portable Bluetooth avec le hub Logitech sans fil

A lire en premier lieu

Guide d installation. StarTeam

ORACLE TUNING PACK 11G

Notes de mise à jour. 4D v11 SQL Release 2 (11.2) Notes de mise à jour

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons

Import PDF. Manuel d'utilisation

01V96i Editor Manuel d'installation

Guide de démarrage de Business Objects Crystal Decisions

EndNote Web. Quick Reference Card THOMSON SCIENTIFIC

Manuel d utilisation. Logiciel (Device Monitor) Pour les systèmes d imagerie numérique. Configuration requise Description générale

Demande d'assistance : ecentral.graphics.kodak.com

4D v11 SQL BREAKING THE LIMITS * Les nouveautés

Acronis Backup & Recovery 10 Server for Windows Acronis Backup & Recovery 10 Workstation. Guide de démarrage rapide

Conditions d utilisation du service

Manuel d utilisation du logiciel de messagerie personnelle Palm VersaMail 2.5

Popsy Financials. Liaison bancaire

LES SOLUTIONS DE CONNECTIVITÉ 4D

Manuel d utilisation Logiciel (Communications Utility)

La clé USB nomade - La mobilité logicielle

Programme de formation

3 logiciels «gratuits» pour gérer sa bibliographie

Manuel de l'application SMS

Open Source Professional Training

Google Documents permet d élaborer un questionnaire, de le diffuser sur le net pour ensuite le dépouiller.

Initiation à l utilisation de la micro-informatique Internet Explorer 7. Mode d emploi.

Sage 300 ERP Guide de l'utilisateur de Services bancaires. Mai 2014

Cours Informatique 1. Monsieur SADOUNI Salheddine

Initiation à Excel. Frédéric Gava (MCF)

4D Backup. Utilisation Windows /Mac OS. 4D Backup D SA. Tous droits réservés.

Initiation à linfographie

Objet du document. Version document : 1.00

Manuel d'utilisation de Mémo vocal

A. À propos des annuaires

Suite bureautique, les enjeux d'une alternative.

Base de Connaissances SiteAudit. Utiliser les Rapports Planifiés. Sommaire des Fonctionnalités. Les Nouveautés

NetBak Replicator 4.0 Manuel de l utilisateur Version 1.0

Guide d'installation. Borland StarTeam 2006

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.0

DESKTOP Internal Drive. Guide d installation

Instructions et spécifications pour la transmission en format XML de déclarations par lots. 30 mai 2015 MODULE 1

sommaire Archives... Archiver votre messagerie... Les notes... Les règles de messagerie... Les calendriers partagés Les listes de diffusions...

Guide d utilisation et d administration

Mathcad Ces capacités font de Mathcad l outil de calcul technique le plus utilisé au monde.

Avertissement. La Gestion Electronique de Documents

Share Monitor Manuel de l utilisateur

IN SYSTEM. Préconisations techniques pour Sage 100 Windows, MAC/OS, et pour Sage 100 pour SQL Server V16. Objectif :

Etudier l influence de différents paramètres sur un phénomène physique Communiquer et argumenter en utilisant un vocabulaire scientifique adapté

Database Manager Guide de l utilisateur DMAN-FR-01/01/12

ENDNOTE WEB POWERED BY THOMSON REUTERS WEB OF KNOWLEDGE SM

des Données et Référentiels sur l'eau Service d'administration Nationale

Transcription:

Du B.O.M. au cœur de 4D Par Bertrand SOUBEYRAND, SOUBEYRAND Consultant Note technique 4D-200808-17-FR Version 1 - Date 1 août 2008 Résumé Depuis 4D v11 SQL, sortie en 2007, l encodage par défaut des textes est devenu Unicode. Unicode est une solution pour que les machines s échangent des textes sans perte de lisibilité, qu ils aient été créés sur Mac ou sur Windows, qu ils soient dans une langue occidentale comme le Français, l Anglais ou dans une langue orientale comme l Arabe. 4D Notes techniques Copyright 1985-2009 4D SAS - Tous droits réservés Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible. Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte. L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers. Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SA. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence. Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA. 4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques enregistrées de 4D SA. Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation. Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc. Mac2Win Software Copyright 1990-2002 est un produit de Altura Software,Inc. 4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,trumbull,ct,usa. XTND Copyright 1992-2002 4D SA. Tous droits réservés. XTND Technology Copyright 1989-2002 Claris Corporation.. Tous droits réservés ACROBAT Copyright 1987-2002, Secret Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'adobe Systems Inc. Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs. 1 / 9

Du B.O.M. au cœur de 4D Depuis 4D v11 SQL, sortie en 2007, l encodage par défaut des textes est devenu Unicode. Unicode est une solution pour que les machines s échangent des textes sans perte de lisibilité, qu ils aient été créés sur Mac ou sur Windows, qu ils soient dans une langue occidentale comme le Français, l Anglais ou dans une langue orientale comme l Arabe. Il existe plusieurs variétés d encodages Unicode utilisés sur différents systèmes mais, rassurez-vous, il est très facile de les convertir les uns vers les autres ; 4D offre à cette fin tout un jeu de fonctions et même plus. Pour arriver à cette transformation il faut déjà commencer par détecter quel Unicode se présente à nous. Une solution pour cela s appelle le BOM, pour Byte Order Mark, une signature presque invisible en tête de fichier qui nous indique si nous allons travailler en UTF-8, en UTF-16 ou en UTF-32. Attention : tous les fichiers texte unicode ne sont pas tagués par un BOM et même 4D ne le gère pas nativement. Cette note technique n a pas pour but de faire de vous un exégète de l encodage Unicode. Nous vous montrerons comment détecter un fichier texte pourvu d un BOM et générer des fichiers marqués de la même manière pour un usage vers d autres applications. Automatiser la commande UTILISER FILTRE http://www.4d.fr/documentation/4ddocv11/cmf/cmf00205.htm Rappelons qu il existe plusieurs saveurs d UTF et que chacune est notée de manière bien codifiée. Voici les principales : UTF-8 UTF-16 UTF-16LE UTF-16BE UTF-32 UTF-32LE UTF-32BE Imaginons que nous devions importer du texte BOM avec la commande RECEVOIR PAQUET. Si notre fichier texte n est pas en UTF-8 (l'encodage par défaut de 4D) il conviendra d utiliser la commande UTILISER FILTRE : UTILISER FILTRE ("utf-16"; 1) RECEVOIR PAQUET ($H_Doc ;$T_Paquet ; 100) Dans l hypothèse où notre application scrute un dossier d importation dont nous ne maîtrisons pas le contenu, comment savoir si je dois mettre UTF-8, UTF-16, UTF-16LE, UTF-16BE, etc.? Nous ne pouvons écrire en dur le nom de l encodage. Nous écrivons une méthode BOM_Get_Encoding qui place dans une variable texte le nom de 2 / 9

l encodage détecté en prenant garde de respecter sa notation : $L_Erreur:=BOM_Get_Encoding (document;->$t_bom_name) UTILISER FILTRE($T_BOM_name;1) RECEVOIR PAQUET($H_Doc;$T_Paquet;100) Décorticage d un fichier UTF tagué BOM Pour créer un fichier UTF, il suffit sur Mac d utiliser Bbedit ou sur Windows UltraEdit. Les deux éditeurs de texte permettent de spécifier l encodage de votre choix. Créez un fichier UTF-16LE, laissez-le vide et fermez-le. N oubliez pas bien sûr de préciser avec BOM! Ultra Edit sur Windows 3 / 9

Enregistrement dans Bbedit sur Mac Ouvrons le document généré, que nous savons être en UTF-16 dans 4D. Nous l ouvrons avec le filtre iso- 8859-1. Vous pouvez également utiliser un document dans le dossier "Documents pour démo." joint) `méthode Test_1 ` Ouvrir un document UFT-16 $H_Doc:=Ouvrir document("";mode lecture ) Si (OK=1) UTILISER FILTRE("iso-8859-1";1) RECEVOIR PAQUET($H_Doc;$T_Paquet;4) $L_Code1:=Code de caractere($t_paquet[[1]]) $L_Code2:=Code de caractere($t_paquet[[2]]) FERMER DOCUMENT($H_Doc) $L_Code1 vaut 255 et $L_Code2 vaut 254. Ces valeurs décimales codées en hexadécimal donnent respectivement FF et FE. Bytes Encoding Form 00 00 FE FF UTF-32, big-endian FF FE 00 00 UTF-32, little-endian FE FF UTF-16, big-endian FF FE UTF-16, little-endian EF BB BF UTF-8 Recommencez l opération avec d autres types d encodages. Suivant les indications du tableau, pour lire les octets d un fichier UTF-8, il convient de lire les octets 1, 2, 3 en UTF-16 les octets 1 et 2. En UTF-32 les octets 1, 2, 3 et 4. Conclusion : pour détecter l encodage d un fichier BOM il suffit de tester les N premiers octets. Trop facile! 4 / 9

La méthode BOM_Get_Encoding utilise une technique un peu différente qui consiste à blober le document texte et à en analyser les 4 premiers octets au maximum Comme on le constate, les deux premiers octets de notre blob sont à 255 (FF) et 254 (FE) et par une série de on retourne le nom de l'encodage. $L_Erreur:=BOM_Get_Encoding (document;->$t_bom_name) UTILISER FILTRE($T_BOM_name;1) RECEVOIR PAQUET($H_Doc;$T_Paquet;100) Voici le code complet : ` Methode : BOM_Get_Encoding ` Description ` La méthode permet de détecter l'encodage d'un document Unicode 5 / 9

` Les 1ers octets d'un document avec BOM: ` 00 00 FE FF UTF-32, big-endian ` FF FE 00 00 UTF-32, little-endian ` FE FF UTF-16, big-endian ` FF FE UTF-16, little-endian ` EF BB BF UTF-8 ` ` Syntaxe : $L_Erreur:=BOM_Get_Encoding($T_chemin_accès_doc;->$T_Nom_Encodage) ` Parametres : ` $0 Entier long le code d'erreur ` $1 Texte le chemin d'accès au doc dont on veut connaître le BOM ` $2 Pointeur Pointeur sur la variable texte qui donne le nom de l'encodage ` Auteur : Bertrand SOUBEYRAND soub@soub.org ` Date et heure : lun. 3 nov. 2008, 18:11 C_TEXTE($1;$T_Path) C_POINTEUR($2;$P_EncodingName) C_ENTIER LONG($0;$L_Erreur) C_BLOB($X_BLOB) C_ENTIER LONG($L_Taille) $T_Path:=$1 $P_EncodingName:=$2 $L_Erreur:=1 Si (Tester chemin acces($t_path)#est un document ) $L_Erreur:=-1 FIXER TAILLE BLOB($X_BLOB;0) DOCUMENT VERS BLOB($T_Path;$X_BLOB) Si (OK#1) $L_Erreur:=-2 $L_Taille:=Taille BLOB($X_BLOB) : ($L_Taille>=4) : ($X_BLOB{0}=0x00FF) & ($X_BLOB{1}=0x00FE) & ($X_BLOB{2}=0x0000) & ($X_BLOB{3}=0x0000) ` UTF-32, little-endian $2->:="UTF-32LE" : ($X_BLOB{0}=0x0000) & ($X_BLOB{1}=0x0000) & ($X_BLOB{2}=0x00FE) & ($X_BLOB{3}=0x00FF) ` UTF-32, big-endian $2->:="UTF-32BE" : ($X_BLOB{0}=0x00EF) & ($X_BLOB{1}=0x00BB) & ($X_BLOB{2}=0x00BF) $2->:="UTF-8" : ($X_BLOB{0}=0x00FF) & ($X_BLOB{1}=0x00FE) ` UTF-16, little-endian $2->:="UTF-16LE" : ($X_BLOB{0}=0x00FE) & ($X_BLOB{1}=0x00FF) ` UTF-16, big-endian $2->:="UTF-16BE" : ($L_Taille>=3) : ($X_BLOB{0}=0x00EF) & ($X_BLOB{1}=0x00BB) & ($X_BLOB{2}=0x00BF) $2->:="UTF-8" 6 / 9

: ($X_BLOB{0}=0x00FF) & ($X_BLOB{1}=0x00FE) ` UTF-16, little-endian $2->:="UTF-16LE" : ($X_BLOB{0}=0x00FE) & ($X_BLOB{1}=0x00FF) ` UTF-16, big-endian $2->:="UTF-16BE" : ($L_Taille>=2) : ($X_BLOB{0}=0x00FF) & ($X_BLOB{1}=0x00FE) ` UTF-16, little-endian $2->:="UTF-16LE" : ($X_BLOB{0}=0x00FE) & ($X_BLOB{1}=0x00FF) ` UTF-16, big-endian $2->:="UTF-16BE" ` moins de deux : il n'y a pas de BOM $0:=$L_Erreur ` Fin de la méthode Renvoi d ascenseur : générer des fichiers texte avec un BOM. Maintenant que la structure de l entête de nos fichiers est comprise pour la lecture, il ne devrait pas y avoir de difficulté pour l écriture ; nous n oublions pas d utiliser le filtre iso-8859-1 pour envoyer l'entête puis de repasser sur le filtre adéquat UTF-8 ou UTF-16 pour le reste du texte! Voici le code de la méthode BOM_Set_Encoding : ` Methode : BOM_Set_Encoding ` Description ` Permet de créer un BOM Byte Order Mark pour un document texte qui vient d'être créé ` Les 1ers octets d'un document avec BOM: ` 00 00 FE FF UTF-32, big-endian ` FF FE 00 00 UTF-32, little-endian ` FE FF UTF-16, big-endian ` FF FE UTF-16, little-endian ` EF BB BF UTF-8 ` ` Syntaxe : $L_Erreur:=BOM_Set_Encoding($H_Doc;$T_EncodingName) ` Parametres : ` $0 Entier long code d'erreur ` $1 Heure on passe la référence du document qui a été ouvert auparavant ` $2 texte le nom de l'encodage ` Auteur : Bertrand SOUBEYRAND soub@soub.org ` Date et heure : lun. 3 nov. 2008, 19:46 C_HEURE($H_Doc;$1) 7 / 9

C_TEXTE($2;$T_EncodingName) C_ENTIER LONG($0;$L_Erreur) C_TEXTE($T_Paquet) $H_Doc:=$1 $T_EncodingName:=$2 $L_Erreur:=1 Si ($H_Doc= 00:00:00 ) $L_Erreur:=-1 Si ($T_EncodingName="") $L_Erreur:=-2 : ($T_EncodingName="UTF-32LE") $T_Paquet:=Chaine(Caractere(0x00FF))+Chaine(Caractere(0x00FE)) +Chaine(Caractere(0x0000))+Chaine(Caractere(0x0000)) : ($T_EncodingName="UTF-32BE") $T_Paquet:=Chaine(Caractere(0x0000))+Chaine(Caractere(0x0000)) +Chaine(Caractere(0x00FE))+Chaine(Caractere(0x00FF)) : ($T_EncodingName="UTF-8") $T_Paquet:=Chaine(Caractere(0x00EF))+Chaine(Caractere(0x00BB)) +Chaine(Caractere(0x00BF)) : ($T_EncodingName="UTF-16") ($T_EncodingName="UTF-16BE") $T_Paquet:=Chaine(Caractere(0x00FE))+Chaine(Caractere(0x00FF)) : ($T_EncodingName="UTF-16LE") $T_Paquet:=Chaine(Caractere(0x00FF))+Chaine(Caractere(0x00FE)) $T_Paquet:="Encodage unicode inconnu" UTILISER FILTRE("iso-8859-1";0) Si (OK#1) $L_Erreur:=-3 ENVOYER PAQUET($H_Doc;$T_Paquet) Si (OK#1) $L_Erreur:=-4 UTILISER FILTRE(*;0) Si (OK#1) $L_Erreur:=-5 $0:=$L_Erreur ` Fin de la méthode 8 / 9

Voici quelques commandes 4D à voir pour Unicode : CONVERTIR DEPUIS TEXTE Convertir vers texte UTILISER FILTRE Code de caractere Caractere EXPORTER TEXTE IMPORTER TEXTE Pour aller plus loin : Le site du consortium Unicode : http://unicode.org/faq/utf_bom.html Télécharger une version demo de Bbedit : http://www.barebones.com/products/bbedit/ Télécharger Ultraedit : http://www.ultraedit.com/ Conclusion Le Byte Order Mark est une façon élégante de communiquer entre application en déclinant le pedigree de son fichier. N'oubliez pas le réglage dans les Préférences si votre base 4D est le résultat d'une conversion. 9 / 9