J'ai rencontré un problème intéressant (comme c'est souvent le cas lors de l'interaction avec des systèmes hérités). Je travaille sur une application (qui fonctionne actuellement sur un système x86 Linux ou Windows) qui peut recevoir des demandes provenant de divers systèmes, l'un d'entre eux étant un système MVS.Quel codepage/charset doit être utilisé pour interpréter les données provenant d'un système MVS dans un environnement Java?
Je tente de déterminer quelle page de codes/jeu de caractères je devrais utiliser pour interpréter les données de demande provenant du système MVS. Dans le passé, j'ai utilisé 'cp500' (IBM-500) pour interpréter la date d'octet à venir pour les systèmes z/OS, mais je crains que MVS soit un peu un système hérité, et que depuis IBM semblait pour changer son esprit de manière cohérente par rapport à l'encodage à utiliser (il doit y avoir des dizaines de codages EBCDIC), cp500 peut ne pas être le codage correct.
La meilleure ressource que j'ai trouvée sur les jeux de caractères en Java est: http://mindprod.com/jgloss/encoding. Cependant à partir de ce site, et IBM Infocenters, je n'ai pas été en mesure d'obtenir une réponse claire.
EDIT: Ajout de ma réponse à Pax ci-dessous:
Il y avait un trou flagrant dans ma question à l'origine des données de demande. Dans ce cas, l'origine des données se fait via une interface WebSphere MQ. Websphere MQ dispose de fonctionnalités pour la conversion au codage correct, mais uniquement pour la lecture des données à l'aide de MQMessage.readString(), qui a depuis été abandonné. Je préférerais utiliser ceci, cependant j'utilise un cadre d'interface propriétaire dans lequel je ne peux pas changer la façon dont le message est lu sur le MQQueue, qui lit directement les octets de la file d'attente et donc je suis laissé manipuler la traduction.
Réponse finale: Je voulais poursuivre sur ce sujet. Il s'avère que le jeu de caractères correct était en effet cp500 (IBM-500). Cependant, j'ai l'impression que les résultats peuvent varier. Quelques conseils pour toute personne ayant le même problème:
Utilisez Charset.availableCharsets() ;. Cela vous donnera une carte des jeux de caractères pris en charge dans votre temps d'exécution. J'ai itéré à travers ces ensembles et imprimé mes données d'octets traduites dans ce jeu de caractères. Bien qu'il ne m'ait pas donné la réponse que je voulais (surtout parce que je n'étais pas capable de lire les données au moment où il entrait), j'imagine que cela pourrait être utile pour les autres.
Reportez-vous à: http://mindprod.com/jgloss/encoding pour obtenir la liste des jeux de caractères pris en charge. Enfin, même si je n'ai pas confirmé cela, mais assurez-vous que vous utilisez le bon JRE. Je pense que les IBM Runtimes supportent plus de jeux de caractères EBCDIC que OpenJDK ou Sun Runtimes.
Andrew, availableCharsets() vous dira ce que vous pouvez traiter mais ne donnera aucune indication sur lequel vous devriez utiliser pour un ensemble spécifique de données. Vous avez encore besoin de trouver cela, sinon votre conversion retournera les déchets. Mais vous avez raison sur IBM JRE - il a des trucs supplémentaires pour z/OS. – paxdiablo