, , 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 pouvez également utiliser *JOB dans la valeur de TGTCCSID(), à ce moment la vous aurez le même comportement dans les 2 cas si votre job est en 1147.

On expliquera ccsid(*exact) dans un autre post

t