2012-07-14 74 views
2

由於默認情況下BlackBerry不支持CP037 encoding,任何人都不知道是否有任何現成的libaray可以使用?我在網上看了一下,看起來什麼都看不到。是自己寫一個唯一的選擇嗎?有沒有人有關於如何做這樣的事情的任何提示?黑莓中的CP037編碼

+0

爲什麼您需要使用EBCDIC? – 2012-07-14 07:20:04

+0

這是我正在開發的客戶端/服務器應用程序。服務器需要使用它編碼一些文本。如果不是不可能的話,更改服務器代碼將會非常困難。 – 2012-07-14 07:29:23

回答

2

編寫自己的字節 - >字符串解碼器看起來非常簡單,因爲編碼不超過256個字符。只需將table from Wikipedia轉換爲switch語句,並將結果字符累加到字符串中。

byte[] rawCP037data = getEbcdicDatabytes(); 
StringBuffer buf = new StringBuffer(); 
for(int i = 0; i < rawCP037data.length; i++) { 
    buf.append(convertCP037toUnicodeChar(rawCP037data[i])); 
} 
String decodedString = buf.toString(); 

char convertCP037toChar(byte b) { 
    switch (b) { 
    case 0x99: 
     return 'r'; 
    case 0xAB: // upside down question mark 
     return 0x00BF; 
    // TODO! fill out the rest of the table here 
    } 
} 
+0

感謝您的回覆。我需要的是能夠獲得原始cp037數據,例如代碼中的getEbcdicBytes方法。相同的想法會起作用嗎?只需使用switch語句將該字節轉換爲與其等價的Cp037? – 2012-07-15 17:51:24

+0

哦,所以你想走向另一個方向?取一個Java字符串並將其轉換爲CP037?你應該能夠迭代字符串中的字符並將字符映射到字節,這與我所寫的相反。你可以閱讀一個不能由CP037表示的字符,在這種情況下,你必須決定你的應用程序的正確行爲 - 通常用一些「未知」字符替換它,或者爲無效輸入引發異常。 – 2012-07-15 22:20:20

+1

太好了。謝謝。我也發現這對任何需要做同樣事情的人都有用 - http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/EBCDIC/CP037.TXT – 2012-07-16 07:53:38