상세 컨텐츠

본문 제목

[Java]통신하는데 한글이 깨져요.

개발

by GoblinMode 2024. 1. 2. 16:37

본문

728x90
반응형

다른서비스, 시스템과 통신할때 데이터가 깨질때가 있다. 

 

데이터 송수신때 데이터 변질이 일어나는 이유를 데이터 송수신 시스템에 문자형식이 안맞을때 주로 발생한다.

 

문자형식은 https://goblinmode.tistory.com/5  한번 읽어보시면 어떤건지 알수있습니다.

 

문자형식이 안맞을경우에는 해당 부분만 맞춰주면 바로 해결이 가능하다. 

 

문자 형식은 String Class에서 Charset이나, charsetName 사용하여 변경해주면 된다.

byte[] byteArr = "tadfet".getBytes();
String utfStr = new String(byte, "UTF-8");

 

위에 방법데로 했는데도 데이터가 깨지면 통신구간에서 데이터가 변질 되는 경우가 있다. 

 

데이터 변질에 이유는 통신규격, 통신시스템들에 환경이 주 원인이다. 이부분까지 수정하거나, 확인하기엔 매우 어렵습니

 

다. 그래서 일반적으론 데이터에 변질이 이루지지 않을 형태로 변환하여 보냅니다. 제일 보편적으로 사용하는게

 

Java Util 패키지에 Base64 Class를 사용하여, 보낼 데이터를 인코딩(Encoder)하여서 송신하고, 수신후 디코딩(Decoder)

 

해주어 해결하면 됩니다.

 

문자를 UTF-8형식으로 Base64 인코딩 해줍니다.

String str = "TextTypeUtf-8";
// String을 UTF-8 포멧으로 Byte 추출
byte[] byteArr = str.getByte("UTF-8");
// Base64 인코딩
String enStr = Base64.getEncoder().encodeToString(byteArr);

 

이렇게 만들어진 문자열을 가지고 통신하면 됩니다.

 

수신측에서는 역순으로 진행해줍니다.

// 전달받은 데이터를 base64 디코딩해준다.
byte[] decodedBytes = Base64.getDecoder().decode(enStr);
// utf-8 포멧으로 변환
String deStr = new String(decodedBytes, "UTF-8");

 

이렇게 UTF-8 형식에 데이터 생성 > Base64 인코딩 > 송신 > 수신 > Base64 디코딩 > UTF-8 형식 변한

 

순으로 작업해주면 됩니다.

 

728x90
반응형

관련글 더보기