예를 들어서 안드로이드 클라이언트가 다른 외부 서버랑 연결해서 소켓 연결 후 통신을 주고 받는데,
아스키코드를 주고 받을 때는 문제가 없지만 한글을 주고 받을 때는 깨지는 현상이 생깁니다.
이것은 인코딩과 관련된 문제로 주고 받을 때 클라이언트쪽에서 송수신할 때에 아래와 같이 처리를 해주면 됩니다.
보통 Buffered 객체를 많이 쓰므로 이것으로 예를 들겠습니다.
//소켓 연결 처리.
SocketAddress remoteAddr=new InetSocketAddress("127.0.0.1",1234);
Socket socket=new Socket();
socket.connect(remoteAddr); //remoteAddr
//Buffered 객체 연동.
BufferedOutputStream out=new BufferedOutputStream(socket.getOutputStream()); //output stream
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream(),"EUC_KR")); //input stream.
위 코드를 보면 out은 서버로 데이타를 내보낼 때 쓰고, in은 서버에서 데이타를 받을 때 씁니다.
Reader 객체 생성시 EUC_KR를 주게 되면 서버에서 받는 데이타는 한글이라도 깨지지 않습니다.
전송할 때는
String data="한글테스트\n";
out.write(data.getBytes("EUC_KR"));
이와 같이 EUC_KR 로 인코딩하여 전송하면 해결됩니다.
간단한 내용이지만 이것으로 헤매는 분들이 계시기에 올려둡니다...
'프로그래밍 > 자바, 안드로이드' 카테고리의 다른 글
[AndroidStudio] error: cannot find symbol class AppCompatActivity (0) | 2016.02.14 |
---|---|
RECT(사각형)에 대한 충돌 처리 방법 (1) | 2015.03.02 |
onTouchEvent 함수에서 동시 터치 인식 방법 (2) | 2015.02.20 |
SharedPreferences 객체를 이용하여 간단하게 환경설정 내용 저장하기 (0) | 2015.02.08 |
소켓 송신시 버퍼링 현상 발생할 경우 (0) | 2015.02.08 |