2015-01-16 9 views
0

ASCII에서 EBCDIC 및 부절로 변환하는 데 두 개의 배열이 사용되고 있습니다. Context : UNIX에서 실행중인 MyMainframeApp이 있으며 EBCDIC에서만 파일을 보내고받습니다. 이러한 파일은 MyWebApp에서 ASCII 형식으로 읽고 처리하고 EBCDIC로 리턴해야합니다. 두 개의 다음 배열은 완벽하게 변환을 만족시킵니다. 문제는 이제 확장 ASCII를 지원해야하므로 (인터넷에서받은 마지막 배열 참조) EXTENDED_Array를 ASCII []로 조인하고 싶습니다. EBCDIC에서 동일한 코드는 무엇입니까? 응용 프로그램은 Windows 2012/JDK 6 및 Unix/JDK 6에서 모두 실행되어야합니다. 페이지 코드를 모른다면이 작업을 수행 할 수있는 안전한 방법이 있습니까? 참고 : ASCII에서 EBCDIC로 변환하는 방법을 묻지 않습니다 (이 포럼에이 질문에 대한 좋은 대답이 있습니다). 첫째, 나는 spoot ligh를 "EXTENDED"에 넣고 싶습니다. 그리고 나서 확장 ASCII에 해당하는 배열이 무엇인지 묻습니다. 그리고 페이지 코드에 대해 인식하지 못했을 때 안전하게 작업 할 수있는 방법이 있는지 물어 봅니다.페이지 코드가 unknow 때 확장 ASCII에서 EBCDIC 및 부사장으로 변환하는 방법

ASCII[] = { 
       0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 
       0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 
       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 
       0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 
       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 
       0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 
       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 
       0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 
       0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 
       0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 
       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 
       0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e 
    }; 

EBCDIC[] = { 
       0x0040, 0x005a, 0x007f, 0x007b, 0x005b, 0x006c, 0x0050, 0x007d, 0x004d, 
       0x005d, 0x005c, 0x004e, 0x006b, 0x0060, 0x004b, 0x0061, 
       0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 
       0x00f9, 0x007a, 0x005e, 0x004c, 0x007e, 0x006e, 0x006f, 
       0x007c, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 
       0x00c9, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 
       0x00d7, 0x00d8, 0x00d9, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 
       0x00e8, 0x00e9, 0x00ad, 0x00e0, 0x00bd, 0x005f, 0x006d, 
       0x0079, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 
       0x0089, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 
       0x0097, 0x0098, 0x0099, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 
       0x00a8, 0x00a9, 0x00c0, 0x006a, 0x00d0, 0x00a1 
    }; 

EXTENDED_Array = { 0x00C7, 0x00FC, 0x00E9, 0x00E2, 
      0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 
      0x00EE, 0x00EC, 0x00C4, 0x00C5, 0x00C9, 0x00E6, 0x00C6, 0x00F4, 
      0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 
      0x00A3, 0x00A5, 0x20A7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA, 
      0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 
      0x00BC, 0x00A1, 0x00AB, 0x00BB, 0x2591, 0x2592, 0x2593, 0x2502, 
      0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 
      0x255D, 0x255C, 0x255B, 0x2510, 0x2514, 0x2534, 0x252C, 0x251C, 
      0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 
      0x2560, 0x2550, 0x256C, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559, 
      0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 
      0x2584, 0x258C, 0x2590, 0x2580, 0x03B1, 0x00DF, 0x0393, 0x03C0, 
      0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 
      0x221E, 0x03C6, 0x03B5, 0x2229, 0x2261, 0x00B1, 0x2265, 0x2264, 
      0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 
      0x207F, 0x00B2, 0x25A0, 0x00A0 }; 

// 예 EBCDIC의 J1644 € [1] [1] 1240üÐB "[1] [1] [1] 1240üÐB AA"[1] [1] 890 @@ 0,482,613 1,644 @ €의 AA € @ [1]

// 여기에 내가 사용하고있는 솔루션을 추가하고 싶습니다. 그것이 나의 근원 질문에 100 % 응답이 아니더라도, 나는 이것이 미래 독자를 위해 유용 할다는 것을 희망한다. 번역은 [] = {

0x0000, 0x0001, 0x0002, 0x0003, 0x0005, 0x0007, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F 

    , 0x0010, 0x0011, 0x0012, 0x0013, 0x0015, 0x0016, 0x0018, 0x0019, 0x001C, 0x001D, 0x001E, 0x001F 

    , 0x0022, 0x0025, 0x0026, 0x0027, 0x002D, 0x002E, 0x002F 

    , 0x0032, 0x0037, 0x003C, 0x003D, 0x003F 

    , 0x0040, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F 

    , 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F 

    , 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F 

    , 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F 

    , 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F 

    , 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F 

    , 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF 

    , 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF 

    , 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF 

    , 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF 

    , 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF 

    , 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE 

    }; 

민간 최종 INT의 ASCII는 [] 안전하게 = {

0x0000, 0x0001, 0x0002, 0x0003, 0x0009, 0x007F, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F 

    , 0x0010, 0x0011, 0x0012, 0x0013, 0x000A, 0x000B, 0x0018, 0x0019, 0x001C, 0x001D, 0x001E, 0x001F 

    , 0x001C, 0x000A, 0x0017, 0x001B, 0x0005, 0x0006, 0x0007 

    , 0x0016, 0x0004, 0x0014, 0x0015, 0x001A 

    , 0x0020, 0x00E2, 0x00E4, 0x00E0, 0x00E1, 0x00E3, 0x00E5, 0x00E7, 0x00F0, 0x00A2, 0x002E, 0x003C, 0x0028, 0x002B, 0x007C 

    , 0x0026, 0x00E9, 0x00EA, 0x00EB, 0x00E8, 0x00ED, 0x00EE, 0x00EF, 0x00EC, 0x00DF, 0x0021, 0x0024, 0x002A, 0x0029, 0x003B, 0x005E 

    , 0x002D, 0x002F, 0x00C2, 0x00C4, 0x00C0, 0x00C1, 0x00C3, 0x00C5, 0x00C7, 0x00D1, 0x00A6, 0x002C, 0x0025, 0x005F, 0x003E, 0x003F 

    , 0x00F8, 0x00C9, 0x00CA, 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x005F, 0x003A, 0x0023, 0x0040, 0x0027, 0x003D, 0x0022 

    , 0x00D8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x00AB, 0x00BB, 0x00F0, 0x000D, 0x00DE, 0x00B1 

    , 0x00B0, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x00AA, 0x00BA, 0x00E6, 0x00B8, 0x00C6, 0x00A4 

    , 0x00B5, 0x007E, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x00A1, 0x00BF, 0x00D0, 0x005B, 0x00FE, 0x00AE 

    , 0x00AC, 0x00A3, 0x00A5, 0x0095, 0x00A9, 0x00A7, 0x00B6, 0x00BC, 0x00BD, 0x00BE, 0x00DD, 0x00A8, 0x00AF, 0x005D, 0x0092, 0x00D7 

    , 0x007B, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x009B, 0x00F4, 0x00F6, 0x00F2, 0x00F3, 0x00F5 

    , 0x007D, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x00B9, 0x00FB, 0x00FC, 0x00F9, 0x00FA, 0x00FF 

    , 0x005C, 0x00F7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x00B2, 0x00D4, 0x00D6, 0x00D2, 0x00D3, 0x00D5 

    , 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x00B3, 0x00DB, 0x00DC, 0x00D9, 0x00DA 

    }; 
+0

의지하지 대부분의 - 크게하지 않을 경우 * 모든 *! - 확장 ASCII 코드 중 EBCDIC에서는 사용할 수 없습니까? – usr2564301

+0

ASCII/EBCDIC에서 /로 변환하는 방법을 알고 있다면 조회 테이블을 생성하는 데 그 문자를 사용하지 않는 이유는 무엇입니까? –

+0

이미 여러 개의 EBDIC 문자 세트가 JDKS에 포함되어 있다는 것을 알고 있습니까? – EJP

답변

1

, 당신은 코드 페이지입니다 수없는 경우 http://www.flounder.com/ebcdictoascii2.htm

민간 최종 INT EBCDIC에서 복사 알 수 없는. 가장 좋은 방법은 코드 페이지를 추측하려고 스니핑

  1. 사용자 정의 변환 표
  2. 입니다
+0

두 번째 주석에 대해 Java에서 서버의 코드 페이지가 무엇인지 알아낼 방법이 있습니까? 내 말은, 실행 시간에 코드 페이지가 무엇인지 확인하고 abc라면 특정 로직을 수행합니다. 그렇지 않으면 def가 다른 플로우를 수행합니다. 코드 페이지를 추측하기 위해 "스니핑"한다는 것은 정확히 무엇을 의미합니까? 몇 가지 예를들 수 있습니까? 솔직히, 나는이 용어를 http communication에 적용하기 위해 사용했지만 다른 것을 말하고 싶다. –

+1

잘못된 단어 선택. 나는 처음 몇 바이트의 내용 (1024 또는 그와 비슷한 것)을 읽으 려하고 jchardet 같은 것을 사용하여 코드 페이지를 추측했다. –

+0

jchardet을 사용하여 코드 페이지를 정확하게 알아내는 것이 안전한지 아는가? ? 나는 http : //jchardet.sourceforge를 읽었다.그물/그리고 그것은 사용하기가 아주 간단 해 보이지만 나는 그것에 의지 할 수 있는지 궁금합니다. 동일한 응용 프로그램이 Windows 2012 및 Mainframe/Unix에서 실행되고있을 것입니다. –