스마트기기개발관련/안드로이드 개발

안드로이드 소켓통신 한글 깨짐현상 관련

AlrepondTech 2011. 7. 20. 10:49
반응형

 

 

 

=================================

=================================

=================================

 

 

 

 

 

Stream을 생성할 때, charset을 같이 설정 해 주면 된다.

완전 간단하면서 깔끔하다.

 

 

ex) reader, writer stream 예. 채팅 앱 만들때 썼던코드 그대로 올려본다...

...

bReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "euc-kr"));
bWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "euc-kr"));

 

 

 

 

=================================

=================================

=================================

 

 



 

 

 

본인이 서버와의 소켓통신프로그램을짜던도중 한블록이 20바이트짜리를 10개를 전송받아 20바이트씩 짜르는데 문제가 발생햇다 .

그건바로 한글이 들어있는 바이트를 제대로 자르지 못하는 문제가 발생했던것 .

그래서 안펍을 뒤져보니 이런 글이 ..

 

링크 : http://www.androidpub.com/70338

 

결론은 안드로이드는 인코딩 형식을 안정해주면 기본으로 UTF-8 로인코딩하는데 한글은 무려 3Byte 라는 문제가 ~!

 

해결은 서버와 클라이언트간의 인코딩 형식을 통일시켜주면 된다지만 서버인코딩을 바꾸면 치명적인 문제가 ㄷㄷ

 

(기본에 나가있는 프로그램은 다른 형식이라 ㄷㄷ)

 

그래서 클라이언트에서 알아서 해야되는 문제가 생기는데 ...

 

인코딩 형식을 정해주지 않을때에는 어떤 인코딩옵션인지 몰라 버벅대다가 .

 

겨우 찾았다 .

 

윈도우즈 이클립스에서 작성되는 자바 프로그램은 기본으로 "MS949" 를 쓴다고 한다 .

 

그러니 클라이언드에서 소켓통신으로 받은 바이트를 전환할때는 "MS949" 를 사용한다 .

 

 

temp = new String(a, i*28, 28,"MS949");

 

 

 

 

=================================

=================================

=================================

 

 




출처: http://godofcode.tistory.com/312

자바 안드로이드 네트워크 통신 소켓  한글 깨짐현상 해결 방법

 

byte[] write_buf = new byte[SENDSIZE];

 

DatagramPacket write = new DatagramPacket

                                             (write_buf,write_buf.length,read.getAddress(), read.getPort());

 

write_buf = temp.getBytes();  < - 문제점은 바로 요녀석이다.


 

 

 

이렇게 바꿔주면 깨긋이 해결

 

write_buf = temp.getBytes("UTF-8");

 

서버와 모바일은 서로 케릭터 타입이 다르기때문에 형변환을 해줘야한다.

 

 

 

=================================

=================================

=================================

 

 

 

 

반응형