UTF-8 et Blob

Bonjour,

J’ai un problème de charset voici le code :

a4_bloc_contenu:=“écoute le monde”

C_BLOB($xblobOut)
$input:=""
TEXTE VERS BLOB($input;$xblob)
C_TEXTE($input;$output)

TRAITER BALISES 4D($xblob;$xblobOut)
$refDoc:=Créer document("")

Si (OK=1)
FERMER DOCUMENT($refDoc)
BLOB VERS DOCUMENT(Document;$xblobOut)
Fin de si

Le contenu du document ainsi créé n’est pas en UTF-8, ce qui est très problématique.

Le support 4D m’a changer tout le code pour utiliser du texte a la place des blob,envoyer paquet et utiliser filtre à la place de blob vers document… Ce qui n’est pas vraiment ce que j’avais demandé.

Avez vous une autre solution ? Savez vous pourquoi 4D n’utilise pas l’UTF-8 comme charset par défaut ?

Je risque d’avoir a traiter de gros document, entre variable et blob cela aura a votre avis une incidence ?

Merci d’avance pour vos réponses

Je me demande, dans la mesure où :

  • TRAITER BALISES 4D accepte du texte en entrée / sortie
  • TEXTE VERS DOCUMENT peut remplacer BLOB VERS DOCUMENT
  • la limite de taille de texte est aux alentours de 1Go (ça laisse du mou…)
    pourquoi ne pas tout faire en texte plutôt que passer par un blob ?
    Quelque chose comme ça :
    <code 4D>
    C_TEXTE($input;$output)
    $input:=""
    TRAITER BALISES 4D($input;$output)
    $refDoc:=Créer document("")
    Si (OK=1)
    FERMER DOCUMENT($refDoc)
    TEXTE VERS DOCUMENT (Document;$output;“utf-8”;Document avec CR)
    Fin de si
    </code 4D>

Bonjour Guillaume,

Vous pouvez passer le jeu de caractères à utiliser à la commande TEXTE
VERS BLOB

: Doc

Le paramètre formatTexte permet de définir le format interne et le
jeu de caractères de la valeur de type Texte à écrire. Pour cela,
passez dans formatTexte une des constantes suivantes, placées dans le
thème “BLOB” :
[…]
Si vous omettez le paramètre formatTexte, par défaut 4D utilise le
format Mac chaîne en C.

Mais TEXTE VERS DOCUMENT serais plus approprié que BLOB VER DOCUMENT, vous éviteriez de passer votre texte dans un blob pour TRAITER BALISE HTML qui accepte aussi du texte. Sauf si vous avez un problème avec la BOM.

Du coup j’ai testé avec des textes directement et cela fonctionne.

Si la taille de texte c’est 1go, cela devrait le faire.

En revanche je ne comprend pas pourquoi Blob vers document ne gère pas par défaut l’utf-8, je pensais que c’était le cas, mais ce n’est pas grave.

Merci pour votre réponse

: Guillaume BELLEGUIC

je ne comprend pas pourquoi Blob vers document ne gère pas par défaut
l’utf-8, je pensais que c’était le cas, mais ce n’est pas grave.
Parce qu’il n’a pas à le gérer :wink: . Un blob, c’est bête et binaire. Si on veut gérer un encodage de caractères quelconque, on doit le faire lors de l’opération texte -> binaire (ce que t’a décrit Vincent). Il faudra également connaître cet encodage quand on voudra restituer binaire -> texte. Autrement dit, si on peut travailler en texte, on se fatigue moins.

Pour les conversions texte / blob, 4D propose 2 “paires de commandes” :
TEXTE VERS BLOB / BLOB vers texte
CONVERTIR DEPUIS TEXTE / Convertir vers texte
(j’utilise plutôt la seconde)

Bonjour,

Merci pour les réponses, je note ne pas utiliser les blobs pour travailler sur du texte et surtout BLOB VERS DOCUMENT.

Merci

Bonjour,

Il faut surtout noter, si tu décides de travailler avec des blogs, que le choix du charset se fait lorsque tu convertis le texte en blob.

HTH

si je fais :
TEXTE VERS BLOB($input;$xblob;“UTF-8”)

Cela ne fonctionne pas mieux

: Guillaume BELLEGUIC

si je fais :
TEXTE VERS BLOB($input;$xblob;“UTF-8”)
Cela ne fonctionne pas mieux
Normal, tu fais un “mix” entre le paramètre d’encodage des deux paires de commandes :
a) avec http://doc.4d.com/4Dv16R6/4D/16-R6/TEXTE-VERS-BLOB.301-3547857.fr.htmlTEXTE VERS BLOB / Blob vers texte>, le paramètre d’encodage est un entier long (dans ton cas, il faut utiliser la constante UTF8 texte sans longueur qui vaut 6) :
<code 4D>
TEXTE VERS BLOB($input;$xblob;UTF8 texte sans longueur)
</code 4D>
b) avec http://doc.4d.com/4Dv16R6/4D/16-R6/CONVERTIR-DEPUIS-TEXTE.301-3548294.fr.htmlCONVERTIR DEPUIS TEXTE / Convertir vers texte>, le paramètre d’encodage est une chaine :
<code 4D>
CONVERTIR DEPUIS TEXTE ($input;“UTF-8”;$xblob)
</code 4D>

oui au temps pour moi, j’était occupé sur autre chose et j’ai fait ca d’un oeil discret.

Quoi qu’il en soit je suis passé a la version tout en texte.