티스토리 뷰
서로 다른 시스템 간 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 인코딩 디코딩을 하여 데이터 손실 없이 정상적으로 바이트 데이터를 송수신하여 처리할 수 있음.
'JAVA' 카테고리의 다른 글
[java] jdom xPath 호출 시 멈춤 현상 해결 (0) | 2024.10.11 |
---|---|
MyBatis ORACLE SEQUENCE 미증가 해결 (1) | 2024.04.19 |
ObjectMapper 결과 값 주입이 안되는 경우 (0) | 2024.01.17 |
java RSA decryption is failed (bouncycastleprovider 관련) (1) | 2023.10.06 |
세션 일부 값 누락 현상 조치하기(세션 클러스터링) (0) | 2023.08.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- IMAGE
- html
- 컨테이너
- vscode
- parse
- Oracle
- gradle
- JSON
- 날짜
- Git
- React
- jaxen
- Eclipse
- Windows
- spring
- btye
- SSL
- WAS
- jQuery
- Java
- SQL
- 이벤트발생
- Linux
- SpringBoot
- 깨짐
- TLS
- docker
- JPA
- web
- mybatis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함