바이트는 내부적으로 1바이트로 처리될 것입니다.


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]

글쓴이 :윤경구 1998년 1월 09일 18:35:27

In Reply to: 제 소스를 분석해 보셨군요... posted by 김필호 on 1998년 1월 09일 17:41:30:

앗, 이 쓰레드가 너무 길어지는군요.
좀더 편한 게시판을 만들어야 할 텐데...
:-)
그런데, TextArea에 자바 스트링을 넣을 때 깨어진다는 것은 이해할 수가 없습니다.
바이트 값을 바로 입력하지 않는 이상 깨어지지 않을 것입니다.
적어도 한글 운영 체제 환경에서 스트링이 유니코드로 인코딩되어 있다면 정상적으로 한글이 입력되도록
자바가 내부 처리를 할 것입니다.
실제 JDK 1.1에서 그런 문제가 발생하는 경우는 없었던 것 같습니다.
하지만 JDK 1.0이라면 문제가 달라지겠지요.
실제 바이트와 스트링을 변환할 때 하이 코드라는 개념이 있었던 것은 JDK 1.0 때 메소드들이었지요.
제임스 고슬링 아저씨가 유니코드를 이해하지 못해서 생긴 해프닝이었습니다.
어쨌든 remove_high_ksc5601() 메소드는 다음과 같이 변경할 수 있습니다.
아마도 교수님의 메소드와 같은 일을 수행할 것입니다.


private String convertBytes(String str){
try {
byte[] bytes=str.getBytes("8859_1");
result = new String(bytes, "KSC5601");
}
catch (java.io.UnsupportedEncodingException e) {
System.err.println(e.toString());
}
return result;
}

자바가 스트림으로부터 넘겨 받은 데이터를
DataInputStream의 readLine() 메소드를 사용했기 때문에
생긴 문제로 자바 가상 머신은 이 스트링이 유니코드 인코딩되어 있다고 가정할 것입니다.
(실제로는 유니코드가 아니라 KSC5601 인코딩되어 있겠지요.)
따라서 이 바이트들을 KSC5601 인코딩되었다고 다시 바꿔주는 메소드가 필요한 것입니다.
(* 사실 저도 문자 인코딩에 관해 아는 바가 일천합니다.
개인적으로 이렇게 정리하고 있습니다.)
가장 좋은 방법은 썬이 권장하듯이 JDK 1.1에서는 io 관련 데이터를 처리할 때
역시 BufferedReader의 readLine 메소드를 사용하는 것이겠지요.



BufferedReader is=new BufferedReader(new InputStreamReader((BufferedInputStream)connection.getContent()));
while (true) {
String content=is.readLine();
if (content==null)
break;
ta.append(content+'\n');
}

혹시 잘못된 부분이 있다면 좀더 자세하게 지적해주시길 바랍니다.
스트링은 알고 있는 듯하면서도 헷갈리거든요.


다음 글들:



이어서 글올리기(답하기)

이름:
E-Mail:
제목:
내용:
관련 URL(선택):
URL 제목(선택):
관련 이미지 URL:


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]