par une application tierce.
R: RPG prend en charge UCS2 et UTF-16 (qui est un superensemble de UCS2). Bien que l’API iconv() fonctionne, il est beaucoup plus facile d’utiliser le support intégré de RPG. Soit l’exemple de code suivant :
D string1 S 50A
D string2 S 50C
La variable appelée string1 est une chaîne de caractères ordinaire : ses champs alphanumériques nous sont familiers. La seconde variable, string2, est similaire à cela près qu’au lieu du type de données A, j’utilise le type de données C. Le type de données C est pour UCS2 Unicode.
Comme avec string1, je l’ai faite suffisamment grande pour qu’elle contienne 50 caractères, mais comme UCS2 utilise deux octets par caractère, string2 occupe 100 octets de mémoire pour ces 50 caractères, tandis que string1 n’en occupe que 50. Par défaut, les champs UCS2 (type de données C) sont en CCSID (Coded Character Set Identifier) 13488. Cependant, RPG fournit un mot-clé CCSID que vous pouvez utiliser pour contrôler cela. Si vous voulez des données UTF-16, vous pouvez définir votre champ avec CCSID 1200, comme le montre la figure 2.
RPG contient aussi une BIF (built-in function) %UCS2 qui vous permet de convertir facilement des données entre EBCDIC et Unicode. Vous pouvez coder un littéral avec le BIF %UCS2 et l’attribuer directement à un champ, ou bien convertir de l’EBCDIC du job en CCSID du champ UCS2 avec la même BIF (figure 3). Naturellement, vous pouvez aussi convertir dans l’autre sens :
Test2 = %char(Test3);
Il est facile d’utiliser ce procédé pour écrire des données dans un fichier stream dans l’IFS également. Ecrivez simplement le champ %UCS2 au lieu du champ alphanumérique quand vous appelez l’API write(), comme dans la figure 4. (Les membres ProVIP peuvent télécharger cet exemple de code, y compris le membre /copy, à pentontech.com/IBM Content/Document/article/52230_60_Utf16.zip.)
– Scott Klement