티스토리 뷰

서로 다른 시스템 간 byte 데이터를 송수신하는 기능을 개발

 

조건
1.byte 데이터를 String형으로 송수신
2.시스템간 인스턴스 문자 인코딩(UTF-8, EUC-KR 등)이 다름


바이트 데이터 추출하기

    	System.out.println("===현재 프로젝트 문자 인코딩 UTF-8===");
    	System.out.println("===byte 데이터 문자 인코딩 확인===");
    	String testStr = "테스트";
		
		byte[] euckrByte = testStr.getBytes("EUC-KR");
		byte[] utf8Byte = testStr.getBytes("UTF-8");
		
		String euckrStrToUtf8 = new String(euckrByte,"UTF-8");
		String utf8StrToUtf8 = new String(utf8Byte,"UTF-8");
		
		String euckrStrToEuckr = new String(euckrByte,"EUC-KR");
		String utf8StrToEuckr = new String(utf8Byte,"EUC-KR");
		
		System.out.println("수신인코딩 >> 디코딩 : 결과");
		System.out.println("euckr >> utf8 : " + euckrStrToUtf8);
		System.out.println("utf8 >> utf8 : " + utf8StrToUtf8);
		System.out.println("euckr >> euckr : " + euckrStrToEuckr);
		System.out.println("utf8 >> euckr : " + utf8StrToEuckr);

 

===현재 프로젝트 문자 인코딩 UTF-8===
===byte 데이터 문자 인코딩 확인===
수신인코딩 >> 디코딩 : 결과
euckr >> utf8 : �׽�Ʈ
utf8 >> utf8 : 테스트
euckr >> euckr : 테스트
utf8 >> euckr : ���ㅽ��

 

해당 방식으로 바이트 데이터 추출하여 값을 확인할 수도 있지만 문자열로 전달이 필요하기에 추가 작업이 필요


작업방법

byte[]을 전달하려면 해당 바이트 배열을 BASE64 인코딩하여 전달하는 방법이 있음.
통신하는 두 시스템의 문자 인코딩이 다른 것이 우려될 수 있지만 BASE64을 사용하여 전달하면
수신받는 시스템에서도 동일한 문자 인코딩으로 디코딩하면 정상적으로 파싱이 가능하다.

 

    	System.out.println("===현재 프로젝트 인코딩 UTF-8===");
    	System.out.println("===byte 데이터 BASE64Encode 데이터 인코딩 확인===");
    	BASE64Encoder encoder = new BASE64Encoder();
    	BASE64Decoder decoder = new BASE64Decoder();
    	
    	String testStr = "테스트";

    	byte[] euckrByte = testStr.getBytes("EUC-KR");
		byte[] utf8Byte = testStr.getBytes("UTF-8");
		
    	String euckrByteEncode = encoder.encodeBuffer(euckrByte);
    	String utf8ByteEncode = encoder.encodeBuffer(utf8Byte);
    	
    	System.out.println("===문자형으로 BASE64Encode된 바이트 데이터 수신===");
		
		String euckrStrToUtf8Encode = new String(euckrByteEncode);
		String utf8StrToUtf8Encode = new String(utf8ByteEncode);
		
		System.out.println("수신인코딩 >> 디코딩 : 결과");
		System.out.println("euckr >> utf8 : " + euckrStrToUtf8Encode);
		System.out.println("utf8 >> utf8 : " + utf8StrToUtf8Encode);
		System.out.println("euckr >> euckr : " + "불가");
		System.out.println("utf8 >> euckr : " + "불가");	

		//디코딩 하여 byte 형식으로 변환
		byte[] euckrByteDecode = decoder.decodeBuffer(euckrByteEncode);
		byte[] utf8ByteDecode = decoder.decodeBuffer(utf8ByteEncode);
		
		String euckrStrToUtf8 = new String(euckrByteDecode,"UTF-8");
		String utf8StrToUtf8 = new String(utf8ByteDecode,"UTF-8");
		
		String euckrStrToEuckr = new String(euckrByteDecode,"EUC-KR");
		String utf8StrToEuckr = new String(utf8ByteDecode,"EUC-KR");
		System.out.println("===문자형 데이터 BASE64Decode 후 문자 인코딩 변환===");		
		System.out.println("수신인코딩 >> 디코딩 : 결과");
		System.out.println("euckr >> utf8 : " + euckrStrToUtf8);
		System.out.println("utf8 >> utf8 : " + utf8StrToUtf8);
		System.out.println("euckr >> euckr : " + euckrStrToEuckr);
		System.out.println("utf8 >> euckr : " + utf8StrToEuckr);
===현재 프로젝트 인코딩 UTF-8===
===byte 데이터 BASE64Encode 데이터 인코딩 확인===
===문자형으로 BASE64Encode된 바이트 데이터 수신===
수신인코딩 >> 디코딩 : 결과
euckr >> utf8 : xde9usau
utf8 >> utf8 : 7YWM7Iqk7Yq4
euckr >> euckr : 불가
utf8 >> euckr : 불가
===문자형 데이터 BASE64Decode 후 문자 인코딩 변환===
수신인코딩 >> 디코딩 : 결과
euckr >> utf8 : �׽�Ʈ
utf8 >> utf8 : 테스트
euckr >> euckr : 테스트
utf8 >> euckr : ���ㅽ��

결론
통신할때 문자 인코딩(UTF-8, EUC-KR 등)을 어떤 것으로 할 것인지 사전에 협의하여 동일한 문자 인코딩으로 BASE64 인코딩 디코딩을 하여 데이터 손실 없이 정상적으로 바이트 데이터를 송수신하여 처리할 수 있음.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함