2009-04-21 23 views
12

हमारी आवश्यकता मुख्य रूप से ईबीसीडीआईसी पाठ को मेनफ्रेम पर भेजना है। हमारे पास यूटीएफ 8 प्रारूप के कुछ चीनी पात्र हैं। तो, क्या यूटीएफ -8 अक्षरों को ईबीसीडीआईसी में परिवर्तित करने का कोई तरीका है?यूटीएफ -8 जावा में ईबीसीडीआईसी

धन्यवाद, राज मोहन

+0

क्या यूटीएफ -8 से ईबीसीडीआईसी रूपांतरण हानि रहित होगा? यही है, क्या आप आगे और पीछे बदल सकते हैं और फिर भी हर बार एक ही ईबीसीडीआईसी बाइट प्राप्त कर सकते हैं? –

उत्तर

8

अपने लक्ष्य प्रणाली मान लिया जाये कि एक आईबीएम मेनफ्रेम या मध्य दूरी है, यह EBCDIC यह में बनाया एन्कोडिंग के सभी के लिए पूरा समर्थन है, CPxxxx नामित एन्कोडिंग के रूप में JVM है आईबीएम CCSID के (सीपी करने के लिए इसी कोड पेज के लिए खड़ा है)। आपको होस्ट-साइड पर अनुवाद करने की आवश्यकता होगी क्योंकि क्लाइंट पक्ष के पास आवश्यक एन्कोडिंग समर्थन नहीं होगा।

के बाद से यूनिकोड DBCS और अधिक से अधिक है, और हर ज्ञात चरित्र का समर्थन करता है, आप की संभावना कई EBCDIC एनकोडिंग को लक्षित हो जाएगा; इसलिए आप उन एन्कोडिंग को किसी भी तरह से कॉन्फ़िगर करेंगे। अपने क्लाइंट यूनिकोड (यूटीएफ -8, यूटीएफ -16, इत्यादि) को केवल तभी प्रयास करें, जब होस्ट मेजबान पर आता है और/या मेजबान सिस्टम छोड़ देता है।

अनुवाद मेजबान साइड नहीं करना पड़ता अलावा, यांत्रिकी किसी भी जावा अनुवाद समान ही हैं; जैसे नया स्ट्रिंग (बाइट्स, एन्कोडिंग) और स्ट्रिंग.getबाइट्स (एन्कोडिंग), और विभिन्न एनआईओ और लेखक वर्ग। वास्तव में कोई जादू नहीं है - यह कहने के अलावा, आईएसओ 885 9-एक्स और यूनिकोड, या किसी अन्य एसबीसीएस (या सीमित डीबीसीएस) के बीच अनुवाद करने से अलग नहीं है।

उदाहरण के लिए:

byte[] ebcdta="Hello World".getBytes("CP037"); // get bytes for EBCDIC codepage 37 

आप IBM's documentation website बारे में अधिक जानकारी पा सकते हैं।

4

ईबीसीडीआईसी में कई 8-बिट कोडपेज हैं। उनमें से कई वीएम द्वारा समर्थित हैं। Charset.availableCharsets().keySet() पर एक नज़र, EBCDIC पृष्ठों IBM... नाम हैं है (वहाँ IBM500 के लिए cp500 तरह उपनाम के रूप में आप Charset.forName("IBM500").aliases() से देख सकते हैं)।

दो समस्याएं हैं:

  1. अगर आपके पास वर्ण EBCDIC के विभिन्न कोड पृष्ठों में शामिल है, यह मदद नहीं करेगा
  2. मुझे यकीन नहीं कर रहा हूँ, अगर इन वर्णसेट किसी भी वी एम के बाहर खिड़कियों में उपलब्ध हैं।

पहले के लिए, this approach पर एक नजर है। दूसरे के लिए, वांछित लक्ष्य क्रम ;-)

+0

'आईबीएम *' नामक सभी वर्णमाला ईबीसीडीआईसी नहीं हैं। उदाहरण के लिए, [आईबीएम 850] (http://en.wikipedia.org/wiki/Code_page_850) कमांड प्रॉम्प्ट में यू.एस. और पश्चिमी यूरोपीय संस्करणों में उपयोग किया जाने वाला मानक कोडपेज है। – lavinio

0

midrange के लिए पर एक कोशिश है AS/400 (आईबीएम मैं इन दिनों) के लिए सबसे अच्छा शर्त आईबीएम जावा टूलकिट (jt400.jar) जो इन सभी करता है उपयोग करने के लिए है चीजें पारदर्शी रूप से (शायद थोड़ा संकेतित)।

कृपया ध्यान दें कि जावा के अंदर एक चरित्र एक 16 बिट मूल्य, नहीं एक UTF-8 (है कि कोई एन्कोडिंग है)।

2

आप हमेशा जावा (JTOpen) के लिए आईबीएम टूलबॉक्स का उपयोग कर सकते हैं, खासकर com.ibm.as400.access.AS400Text कक्षा jt400.jar में।

यह इस प्रकार है:

int codePageNumber = 420; 
String codePage = "CP420"; 
String sourceUtfText = "أحمد يوسف صالح"; 

AS400Text converter = new AS400Text(sourceUtfText.length(), codePageNumber); 
byte[] bytesData = converter.toBytes(sourceUtfText); 
String resultedEbcdicText = new String(bytesData, codePage); 

मैं कोड-पेज और एन्कोडिंग CP420 इसके तत्संबंधी जावा प्रतिनिधित्व करते थे, इस कोड को पृष्ठ का अरबी पाठ के लिए प्रयोग किया जाता है, हां, तो आप चीनी पाठ के लिए उपयुक्त कोड पेज चुनना चाहिए।

संबंधित मुद्दे