소켓을 사용하여 받아오는 과정에서 아래와 같이 한글이 깨집니다.

한글깨진다면 인코딩을 손보면 되겠지만 신기한건 중간중간이 깨집니다.


그것도 받아올때마다 똑같은 곳만 깨집니다.(이말은 받아오는 소켓에는 문제가 없다는것이지요.)

또한 않깨진 곳의 한글은 정확하게 잘 나온다는겁니다.(깨진곳만 계속 깨진다는것은 결국 인코딩 문제이지요.)


그래서 한글 인코딩으로 모두 확인했었습니다.

new String(str.getBytes("현재인코딩"), "변경인코딩")


utf-8, euc-kr, ksc5601, x-windows-949, iso-8859-1 까지..알고 있는 인코딩을 모두 해봤지만 전부 다 깨지던가 위에처럼 중간만 깨지더군요.

구글을 아무리 찾아봐도 않나왔고, 받을때 int 형으로 받은다음 char형으로 변경하면 된다라는 말도 있었지만 결과는 똑같았습니다.


해결은 제 실수 더군요. 소켓으로 받아올때 인코딩 방식을 쓰지 않았었습니다.


변경전

BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));

변경후

BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));


아래와 같이 정상적으로 잘 나옵니다.


인코딩 방식을 정해주지 않자. java에서는 임의의(혹은 기본으로 정해진) 인코딩 방식으로 가져왔고, 

보여주는건 현재 가져온 인코딩 방식으로 출력가능한 한글문자만 출력된것으로 보입니다.


결론은 아는척 하지말고 기본에 충실하자.(기본적으로 해야될것을 않하고 대충 하니 몇시간을 날려버리네요.)

'app > java' 카테고리의 다른 글

java 생성자에 대한 고찰  (0) 2013.01.08
Swing jtable Thread  (0) 2013.01.07
socket url 이용시 한글 중간 깨짐 현상  (0) 2012.12.27
java BigInteger 사용하기  (0) 2012.02.23
java replace / replaceFirst / replaceAll $ 주의 할점.  (0) 2012.02.13
if 문에 대한 단상  (0) 2011.10.29

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret