ما هي صفحة الرموز/مجموعة الأحرف التي يجب استخدامها لتفسير البيانات الواردة من نظام MVS إلى بيئة Java؟

StackOverflow https://stackoverflow.com/questions/818759

سؤال

لقد واجهت مشكلة مثيرة للاهتمام (كما هو الحال غالبًا عند التفاعل مع الأنظمة القديمة).أنا أعمل على تطبيق (يعمل حاليًا على نظام x86 Linux أو Windows) يمكنه تلقي الطلبات من مجموعة متنوعة من الأنظمة، أحدها هو نظام MVS.

أحاول تحديد صفحة الرموز/مجموعة الأحرف التي يجب أن أستخدمها لتفسير بيانات الطلب الواردة من نظام MVS.

في الماضي، استخدمت "cp500" (IBM-500) لتفسير تاريخ البايت القادم لأنظمة z/OS، ومع ذلك أخشى أنه نظرًا لأن MVS هو نظام قديم إلى حد ما، وأنه منذ أن بدا أن IBM قد غيرت رأيها بشكل متسق فيما يتعلق بالتشفير المطلوب استخدامه (يجب أن يكون هناك عشرات من ترميزات EBCDIC)، فقد لا يكون هذا التشفير هو cp500 الصحيح.

أفضل مورد وجدته في مجموعات الأحرف في Java هو: http://mindprod.com/jgloss/encoding .ولكن من هذا الموقع وIBM Infocenters، لم أتمكن من الحصول على إجابة واضحة.

يحرر:تمت الإضافة من ردي على Pax أدناه:

كانت هناك فجوة صارخة في سؤالي فيما يتعلق بأصل بيانات الطلب.في هذه الحالة، يكون أصل البيانات من خلال واجهة Websphere MQ.يحتوي Websphere MQ على تسهيلات للترجمة إلى التشفير المناسب، ولكن هذا مخصص فقط لقراءة البيانات باستخدام MQMessage.readString()، والذي تم إهماله منذ ذلك الحين.أفضل استخدام هذا، ولكنني أستخدم إطار عمل واجهة خاصًا لا يمكنني من خلاله تغيير كيفية قراءة الرسالة من MQQueue، والتي تقرأ وحدات البايت مباشرة من قائمة الانتظار وبالتالي لا أتمكن من التعامل مع الترجمة.

الجواب النهائي:أردت متابعة هذا الأمر.اتضح أن مجموعة الأحرف الصحيحة كانت بالفعل cp500 (IBM-500).ومع ذلك، أنا تحت الانطباع بأن النتائج قد تختلف.بعض النصائح لأي شخص آخر لديه نفس المشكلة:

استخدم Charset.availableCharsets();.سيعطيك هذا خريطة لمجموعات الأحرف المدعومة في وقت التشغيل الخاص بك.لقد قمت بالتكرار خلال هذه المجموعات وطبعت بيانات البايت الخاصة بي المترجمة إلى مجموعة الأحرف تلك.على الرغم من أنه لم يعطني الإجابة التي أردتها (بشكل رئيسي لأنني لم أتمكن من قراءة البيانات أثناء ورودها)، إلا أنني أتخيل أنها قد تكون مفيدة للآخرين.

تشير إلى: http://mindprod.com/jgloss/encoding للحصول على قائمة مجموعات الأحرف المدعومة.

أخيرًا، على الرغم من أنني لم أؤكد ذلك، لكن تأكد من أنك تستخدم JRE الصحيح.أعتقد أن IBM Runtimes تدعم المزيد من مجموعات أحرف EBCDIC ثم OpenJDK أو Sun's Runtimes.

هل كانت مفيدة؟

المحلول

"MVS هو جزء من النظام القديم"؟ها!لا يزال نظام التشغيل المفضل للتطبيقات حيث تمثل الموثوقية الاهتمام الأول.الآن إلى سؤالك :-)

يعتمد الأمر كليًا على ما يولد البيانات.على سبيل المثال، إذا كنت تقوم فقط بتنزيل الملفات من المضيف، فقد يتعامل معها تفاوض FTP.ولكن بما أنك ذكرت Java، فمن المحتمل أنها تتصل عبر JDBC بـ DB2/z، وسوف تتعامل برامج تشغيل JDBC معها بشكل جيد (أفضل بكثير إذا كنت تستخدم JRE الخاص بشركة IBM بدلاً من إصدار Sun).

يحتوي EBCDIC نفسه على المضيف على عدد لا بأس به من الترميزات المختلفة، لذا عليك على الأقل إخبارنا بمصدر البيانات.الإصدارات الأخيرة من DB2 ليس لديها مشكلة في تخزين Unicode في قاعدة البيانات مما قد يخفف من كل مخاوفك.

المهمة الأولى، معرفة مصدر البيانات والحصول على التشفير من SysProg (إذا لم تتم معالجتها تلقائيًا).

تحديث:

أندرو، استنادًا إلى النص المضاف الذي ذكرت فيه أنه لا يمكنك استخدام الترجمات المتوفرة، سيتعين عليك استخدام الطريقة اليدوية.تحتاج إلى تحديد مصدر البيانات والحصول على CCSID من ذلك.ثم قم بالترجمة من وإلى Unicode (أو أي صفحة رموز تستخدمها إن لم تكن Unicode) يدويًا.

CCSID 500 هي صفحة الرموز الافتراضية لشركة EBCDIC International (بدون يورو) ولكن يتم استخدام هذه الأجهزة في جميع أنحاء الكوكب.خدمات تحويل z/OS هي الطريقة التي تقوم بها عادة بالتحويل على الحاسوب المركزي.

بالرغم من هذا هي صفحة iSeries، وهي تسرد عددًا كبيرًا من معرفات CCSID والصور الرمزية الخاصة بها، والتي تنطبق على الحاسب المركزي أيضًا.

ربما تحتاج فقط إلى معرفة ما إذا كنت تستخدم CCSID 500 أو 37 (أو أحد إصدارات اللغات الأجنبية) والعمل على التعيين باستخدام Unicode CCSID 1208.سيتمكن SysProg الخاص بك من إخبارك بأي منها.إذا كنت تعمل لدى شركة أمريكية، فهذا من المحتمل 500 أو 37، لكن شركة IBM تبذل قدرًا كبيرًا من الجهد لدعم صفحات الأكواد المتعددة.سأكون سعيدًا عندما تقوم جميع برامج الحاسبات المركزية الخاصة بهم بتخزين واستخدام Unicode افتراضيًا، فهذا سيجعل الأمور أسهل بكثير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top