본문 바로가기

개발세상/java

소켓 통신시, UTF-8에서 EUC-KR 인코딩 하는법

728x90
반응형

회사에서 진행하고 있는 프로젝트에서 소켓통신을 해야 하는 상황이 발생되었다

개인적으로 Spring으로 웹쪽만 보고 백엔드는 그렇게 많이 하지 않은지라, 통신쪽이 약하다고 생각하고 있다

 

 

소켓통신 중에 대부분 숫자나 영어로 이뤄진 값들을 보내고 있었는데, 한글을 보내야하는 상황에 놓였다

내가 하고 있는 서버는 UTF-8이였고, 받는 서버는 EUC-KR이여서 한글을 보낼때에 Parse Error가 발생했다

에러가 발생하면 내가 받고 싶은 데이터는 아예 받을 수 없었고, result값도 제대로 오지 않아서 판단하기 어려웠다

(삽질을 많이했음)

 

 

일단 내가 담당하고 있는 소스 자체가 UTF-8이여서, 바이트로 가져온 뒤에 String 변환해서 진행하려 했었다

틀린 내용과 맞는 내용 모두 쓴다

 

String testData = "가나다";

byte[] testBytes = testData.getBytes("UTF-8");

String requestData = new String(testBytes, "EUC-KR");

 

먼저 잘못된 케이스 첫번째이다.

내가 관리하고 있는 서비스가 UTF-8이였으니 UTF-8로 바이트 변환을 먼저해준다음에 그 데이터를 EUC-KR로 해주면 되지 않을까 한것 > 결국에 아니였음

 

 

getBytes할때랑 new String할때에 있는 charset부분을 UTF-8, EUC-KR 모두 바꿔가며 해봤으나 안되었다

소켓통신시 OutputStream등을 사용하고 있었는데, 데이터를 보낼때 String으로 보내고 있었다

그러다 보니 무조건 String 형태로 보내야 한다고 생각을 한 것이다

 

 

결국에는 String이 아닌 Bytes로 보내서 성공한 것을 확인할 수 있었다

 

String testData = "라마바";

byte[] testBytes = testData.getBytes("EUC-KR");

 

String 형태가 아닌 바로 EUC-KR로 생성된 바이트를 소켓통신으로 보내니까 잘되었다

되게 간단한 내용이였는데, 무조건 String 형태로 보내야 한다는 생각때문에 삽질을 엄청나게 한 것이였음

아직도 갈길이 멀구나 공부해야지!

728x90
반응형