, , Comprendre l’impact du CCSID de votre source

Vous avez vos sources coté IBMi qui sont le plus souvent stockés dans des fichiers sources QRPGLESRC et le CCSID est à 1147 (je reviens pas sur les dangers du 65635)

Vous décidez de placer, vos sources dans l’IFS et vous décidez d’adopter un (CCSID UTF-8 recommandé) ,voir Windows 1252.

C’est le sens de l’histoire pour giter par exemple

Le CCSID du source a un impact sur les constantes de votre programme RPGLE, à la compilation on va voir un exemple :

Les constantes étant basées sur le CCSID du source par défaut

Voici un programme

**free
ctl-opt dftactgrp(*no)
ccsid(*exact) // << clé : figer au CCSID de ; dcl-c titre 'Tarif semaine dès 4 jours ? ' ; // Constante dcl-s mots char(06) dim(3) ctdata perrcd(1); // tableau chargé à la dcl-ds ds_texte ; // tableau de constante *N Char(06) Inz('école' ) ; // *N Char(06) Inz('garçon') ; // *N Char(06) Inz('café ' ) ; // texte char(06) dim(3) pos(1) ; end-ds; dcl-s i int(10); // Affichage Résultat dsply ('Constante : ' + titre); for i = 1 to %elem(texte) ; dsply ('Texte : ' + texte(i)); endfor; for i = 1 to %elem(mots); dsply (' CTDATA : ' + mots(i)); endfor; *inlr = *on; ** CTDATA mots (3 lignes, codées avec accents) école garçon café

Coté IBMi

Avec un ccsid 1147

CRTBNDRPG PGM(GDATA/SRCCCSID)
SRCFILE(GDATA/QRPGLESRC)

Vous obtenez ceci

Coté IFS

Avec un ccsid UTF-8

CRTBNDRPG PGM(GDATA/SRCCCSID)      

          SRCSTMF(‘SRCCCSID.RPGLE’)

Vous obtenez ceci

Vous perdez les caractères spéciaux

Vous avez une option de compile TGTCCSID qui fixe le CCSID à utiliser

donc on ajoute l’option

CRTBNDRPG PGM(GDATA/SRCCCSID)      

          SRCSTMF(‘SRCCCSID.RPGLE’)

          TGTCCSID(1147)    

L’affichage est correct

Conclusion :

Vous devez pouvez également utiliser *JOB dans la valeur de TGTCCSID(), à ce moment la vous aurez le même comportement dans les 2 cas.

t