L’art du CCSID sur iSeries
Sommaire
- Ce qui va sans dire ou est supposé connu |
- Réglages sur iSeries Access for Windows et autres émulateurs |
- Au niveau général |
- Fichiers, DDS, BD et CCSID |
- SQL et CCSID |
- IFS, fichiers STREAM et CCSID |
- QSH (Qshell) et CCSID |
- Serveur HTTP |
Ce qui va sans dire ou est supposé connu
- Le CCSID *HEXA ou 65535 est une valeur spéciale qui signifie « ne pas faire de conversion ».
- Il doit être clair dans l’esprit de chacun que le fait de modifier le CCSID d’un objet ne convertit pas instantanément son contenu. Pour convertir un fichier dans un nouvel encodage, il conviendra d’abord d’en faire une copie depuis la version initiale dans un nouveau fichier doté du nouveau code.
- L’utilisation d’une commande suppose qu’on dispose des droits idoines..
- Pour se rafraîchir la mémoire sur l’encodage des données, il existe un document magistral [http://www.dg77.net/tekno/xhtml/codage.htm#ebcdic].
Réglages sur iSeries Access for Windows et autres émulateurs
Ecran 5250 iSeries Access(PCSWS)
Communication > Configuration > Page de code hôte
Transfert de fichier
Exemple de transfert AS400 vers PC via l’émulation écran 5250 : Actions > Réception d’un fichier du système hôte > Le programme "Transfert…" s’affiche > Sélection du fichier. A ce moment :
- Le bouton "propriétés du transfert" permet de cocher "convertir le CCSID 65535" ce qui évite de récolter les données en hexadécimal.
- Les "options de format" permettent d’utiliser une commande SQL SELECT (voir les possibilités ci-dessous) ou choisir une autre langue AS400 ce qui permet d’intervenir sur l’ordre de tri.
iSeries Navigator
Avec iSeries Navigator, on voit les fichiers en hexadécimal si on ne lui met pas les points sur les i : Démarrer > Programmes > IBM iSeries Access for Windows > Administration ODBC > Onglet Sources de données utilisateurs > Sélectionner QDSN_[système] iSeries Access ODBC driver > Configurer :
- Onglet Conversion > Cocher Conversion de données binaires (CCSID 65535) en texte.
- Accessoirement : onglet Langue > Type de Tri : choisir tri par id langue > sélectionner.
Pendant qu’on y est, on adapte sa liste de bibliothèques : Mes connexions > [Système] > Bases de données > [nom BD] > en bas, panneau "Tâches relatives aux bases de données" > Choix des schémas à afficher
Au niveau général
Sytème
La valeur système QCCSID détermine le CCSID du système. Si on utilise 65535, l’OS400 déterminera une valeur par défaut à partir du code langue.
Utiliser iSeries Navigator, ou la commande (exemple) CHGSYSVAL SYSVAL(QCCSID) VALUE(1147) ou WRKSYSVAL.
Au niveau du profil utilisateur
Chaque utilisateur peut avoir non seulement un CCSID mais aussi id. langue et code pays particuliers.
Dans le job
En cours de travail, on peut modifier le CCSID. CHGJOB CCSID(297) Mais lors d’un CPYF, la commande examinera d’abord les fichiers de départ et d’arrivée.
Par le clavier-écran : voir la configuration du terminal, iSeries-Access ci-dessus.
Fichiers, DDS, BD et CCSID
PF à DDS, ou sans DDS
Dans la commande CRTPF, on peut indiquer un CCSID si le fichier créé est de type source (FILETYPE(*SRC)), pas s’il est *DATA.
Voici une DDS définissant le CCSID général d’un fichier (1147=FRA avec Euro) et un CCSID particulier pour une zone (13488=UNICODE UCS-2)
Les valeurs distinctes de CCSID peuvent être définies aussi bien sur un fichier logique que sur le physique.
Valeurs spéciales pour le mot-clef (mot-clé) CCSID :
- Longueur
- Uniquement pour fichier écran, si la zone est en UTF-16 (ou UCS-2)
- *MIN
- Peut remplacer la longueur de zone. Utilisable seulement comme référence par un fichiers écrans.
- *LEN
- Comme *MIN
- *(NO)CONVERT
- Relatif aux formats d’impression, pour des formats UCS-2/UTF-16
- *NORMALIZE
- Facilite l’utilisation de données UTF-8 ou UTF-16
Fichier créé sans DDS
Restriction : on peut créer un fichier sans référence à une description externe (DDS), en indiquant simplement la longueur de l’enregistrement, mais alors, dans les commandes CRTPF et CHGPF, la mention d’un CCSID n’est accepté que si c’est un fichier *SRC et non pas *DTA.
DSPF et PRTF
Utilisation dans une zone écran du mot-clef NOCCSID (i.e. pas de conversion sur cette zone) :
SQL et CCSID
CAST : permet de passer une donnée d’un type à l’autre. Sert à modifier la longueur, la précision (numérique)… ou le CCSID pour les données alphanumériques. C’est utile si le fichier a le CCSID passe-partout 65535 mais au moins certaines informations définies par un CCSID inhabituel.
SELECT zone1, CAST(zone2 AS CHAR(30) CCSID 37), zone3 FROM monfichier
ALTER TABLE : permet de modifier le CCSID d’une zone
IFS, fichiers STREAM et CCSID
La commande CHGATR
Permet de modifier un certain nombre d’attributs d’un fichier. Exemple : CHGATR OBJ('/home/monrepertoire/monfichier.txt') ATR(*CCSID) VALUE(297) . Ci-dessous illustration pendant un transfert FTP depuis un PC.
Le fichier "bidon" contient un seul et quelconque caractère.
CHGATR peut être exécutée sur un groupe de fichiers, et également, en spécifiant SUBTREE(*YES), sur tous les sous-répertoires
QSH (Qshell) et CCSID
Attribution du CCSID
Création d’un fichier avec un CCSID donné: touch -C 819 monfichier.txt
Changement du CCSID : setccsid 819 monfichier.txt
Changement du CCSID pendant l’affichage QSHELL (DSPF). Utiliser la touche [F15] Services.
Utilisation de ICONV
L’utility sed recèle un piège. Voir les exemples dans la page sur QSHELL.
Serveur IBM HTTP
L’instance administration serveur et le gestionnaire de connection doivent être lancés avec un CCSID différent de 65535. Si on ne désire pas avoir un CCSID système autre que 65535, procéder de la façon suivante :
- L’instance doit fonctionner sous un profil dont le CCSID n’est pas 65535.
- Lancement (exemple avec CCSID=37) : STRTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN '-fsccsid 37')