2012-07-14 2 views
2

기본적으로 BlackBerry는 CP037 encoding을 지원하지 않으므로 누구나 사용할 수있는 준비가 된 libaray가 있는지 알고있을 것입니다. 나는 온라인으로 한 번 보았고 나는 아무것도 볼 수없는 것 같습니다. 나 자신을 쓰는 유일한 선택인가? 누구든지 그런 일을하는 방법에 대한 조언이 있습니까?블랙 베리의 CP037 인코딩

+0

왜 EBCDIC를 사용해야합니까? –

+0

내가 작업중인 클라이언트/서버 응용 프로그램입니다. 서버는 그것을 사용하여 일부 텍스트를 인코딩해야합니다. 서버 코드를 변경하는 것은 불가능하지는 않더라도 매우 어려울 것입니다. –

답변

2

문자열 인코딩을 직접 작성하는 것은 인코딩이 256자를 넘지 않기 때문에 매우 간단합니다. table from Wikipedia을 switch 문으로 변환하고 결과 문자를 String으로 누적하면됩니다.

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 키로 변환하십시오. –

+0

오, 그래서 다른 방향으로 가고 싶습니까? Java 문자열을 가져 와서 CP037로 변환 하시겠습니까? 문자열에서 문자를 반복하고 문자에서 바이트로 매핑하여 작성한 것과 반대 방향으로 진행할 수 있어야합니다. CP037로 표현할 수없는 문자를 읽을 수 있습니다.이 경우 응용 프로그램에 적합한 행동을 결정해야합니다. 일반적으로 '알 수없는'문자로 대체하거나 잘못된 입력에 대한 예외를 throw합니다 . –

+1

좋아요. 감사. 나는 이것도 똑같은 일을해야하는 사람들에게 유용 할 것이라고 생각했다. –