제 소스를 분석해 보셨군요...


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

글쓴이 :김필호 1998년 1월 09일 17:41:30

In Reply to: [질문]remove_high_ksc5601 메소드에 대하여 posted by 윤경구 on 1998년 1월 09일 10:03:34:

윤경구님
저의 소스를 분석해 보셨군요...


byte[] kscBytes=str.getBytes("KSC5601");


가 하는 일은 단지 공간 확보를 위한 작업입니다.
최종적으로 문자열 변환이 끝났을 때의 문자열 길이만
알 수 있다면 이 부분은 다르게 대체할 수도 있습니다.
즉, getBytes("KSC5601") 가 내부적으로 무슨 일을 하든 상관없이
변환 후의 문자열 길이만 제대로 돌려주기만 하면 됩니다.
소스에서 그 다음의 루틴에 아무 영향이 없지요...


klen 이라고 하는 변수는 소스의 마지막 부분에서 문자열을 리턴하기 전에
바이트 열을 스트링으로 바꿀 때 길이를 맞추기 위한 것입니다.


그 소스에서 하는 일은 널 코드 ('\0') 들을 없애는 겁니다.
"안녕하세요?" 라는 문자열이 TextField 안에서
"¾E³cCI¼¼¿a?" 바뀌어 출력 되는 것은
2 바이트의 한글코드 (또는 유니코드) 사이 사이에
널 코드 들이 있기 때문이지요...
Java 가 내부적으로 처리힐 때는 이 널 코드
(정확하게는 바이트를 정수형으로 처리할 때 붙는 상위 바이트)
가 있는 것이 맞겠지마는 Java 가 이를 TextField 에 넣을 때
사이사이에 있던 널 코드 때문에 있는 글자가 이상하게 보이는 것입니다.


remove_high_ksc5601 가 하는 일은 getBytes("8859_1") 이 하는 일과
비슷하다고 볼 수 있습니다.


저는 remove_high_ksc5601 를 다른 곳에서도 유용하게 쓰고 있습니다.


참고로 저에게는 convert_to_ascii() 와 같은 일을
하는 함수도 만들어서 쓰고 있습니다.


저는 Java 와 한글 문제에 대해 늦게 시작하였으므로
많이 배워야 할 것 같습니다.


그럼 좋은 하루 되시기를...



다음 글들:



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

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


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