Skip to Content
Go Back
안형우

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

📌 CSS가 어려운 이유 — 프로젝트 중심 실전 CSS 강의 소개 2023-04-13
📌 워드프레스, 답답한 빌더와 플러그인 대신 시원하게 커스터마징하기(강의) 2023-01-15
📌 아무도 말하지 않는 PHP의 좋은 점 2018-10-13
📌 유지보수하기 쉬운 CSS 전략(슬라이드) 2016-12-20
📌 워드프레스 테마에서 템플릿 파일 매칭 순서 2013-05-12
📌 [번역] CSS 코드 냄새 2013-01-01

[JAVA] UTF-8 서버에서 올더게이트 전자결제 소켓통신 수정할 부분

초보라 삽질을 좀 많이 했다.

php에도 붙여 봤는데 그 때는 전송 부분에 iconv를 사용해야 했다. 은행은 euc-kr을 사용하고, 우리 홈페이지는 utf-8을 사용했기 때문이다. 만약 홈페이지가 euc-kr로 돼 있는 경우라면 이 글이 필요 없을 것이다.

//은행으로 정보를 전송하기 전에
$String=iconv("utf-8","euckr",$String);
//전송하고 나서 응답받은 메시지를 보려면 
$String=iconv("euckr","utf-8",$String);

이렇게 했었다.

이번에 java로 된 홈페이지에 올더게이트 결제를 붙여야 했다. 이번에도 캐릭터 인코딩이 문제였다. 결정적 힌트를 제공한 글은 ‘java socket encoding 삽질기’였다.

내가 사고를 진행한 순서대로 써보겠다.

우선, 은행 쪽에서 뭔가 메세지가 오는데 깨져서 왔다. 은행쪽 인코딩이 우리 것과 안 맞는다는 판단을 했고, 메시지 수신부를 찾아서 소스를 고쳤다. 아래처럼  소스를 고치고 나서야 메시지를 제대로 볼 수 있었다.

//ProcessRequest함수에 있는 부분
RecvMsg = new String( readMsg( iRecvLen ) );
//위와 같은 소스를
RecvMsg = new String( readMsg( iRecvLen ) , "MS949");
//이렇게 고쳤다.

그러자 은행쪽에서 보내 주는 메시지를 제대로 볼 수 있었다. ‘결제실패’라는 메시지였다.

당연히 보내는 쪽에서도 은행쪽 인코딩인 MS949로 해야 제대로 결제가 진행될 거라고 판단했다. 메시지 전송부를 찾아서 아래처럼 고쳤다.

//역시 ProcessRequest함수에 있는 부분
this.writeMsg(SendMsg.getBytes());
//위와 같은 소스를
this.writeMsg(SendMsg.getBytes("MS949"));
//위와 같이 고쳤다.

그런데 여전히 ‘결제실패’라는 메시지가 왔다. 당황스러웠다.

다음날이 되서야 생각이 진행됐다. ‘getBytes가 저기 말고도 여러 군데 있는 게 아닐까?’

Ctrl+F로 getBytes를 다 찾았다. 역시, 여러 군데 getBytes가 있었다. 일일이 찾아서 고쳤다.(처음부터 getBytes()를 getBytes(“MS949”)로 일괄변환했다면 편했을 텐데;;)

그러자 결제가 제대로 되기 시작했다. 완전 다행.

정말 아래 글이 최고의 실마리를 제공했다. 필자에게 감사한다.

‘java socket encoding 삽질기’

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

댓글 (2개)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다