Q&A

  • 한글비교가 잘 안돼네요...ㅠㅠ
제가 델파이를 0.대 버전부터 사용했었는데, 이 문제를 모르고 있었다니,....ㅠㅠ

예를들어, 아래의 예제가 있습니다.

s := '그들이 그 고용된 정도를 따라 보수를 받';
Edit1.Text := copy(s, Pos('ㅅ',s), 6);

위 예제의 정답은?
당연히, 문자열에 'ㅅ'이 없으니까, '그들이'가 리턴되어야 하는데,...

즉, Pos('ㅅ',s)의 값은 0이라고 생각하는데, 실제로는 19가 나옵니다.
즉, '정도를 '을 'ㅅ돋?'으로 표시합니다.
아마도 '정'과 '도'의 중간을 쪼갠(?)값이라는 뜻인데... 나참...

델파이는 한글 비교가 힘든가요?

어떤 특별한 방법을 사용하는 법을 아시는 분은 절 좀 도와주세요.
완전 엉뚱한 부분에서 문제가 생겨서 더이상 진척이 않됩니다.

팁/테크 에 나오는 한글  HanDiv와 같은 함수를 이용하는 방법은 완전히 소스를 이해할 수가 없어서리...
부탁드립니다.
1  COMMENTS
  • Profile
    최용일 2008.01.08 19:09
    델파이 0.대 버전이 있었는가 모르겠네요...

    암튼... 컴퓨터상에서 구현된는 한글코드에 대해서 전혀 모르시는것 같군요...
    한글은 완성형코드는 각각 2바이트로 되어 있습니다. 우리가 눈으로 볼때는 문자열 s에 'ㅅ'없지만 아스키코드상으로는 '정도를'이라는 문자열안에 'ㅅ'과 같은 코드가 들어가 있습니다. '정'자의 하위바이트와 '도'자의 상위바이트를 합하면 'ㅅ'이 되죠...

    또한 Pos함수는 순수하게 아스키코드로만 비교를 합니다. 안에 있는 문자들이 한글인지 아닌지 전혀 고려를 하지 않는 함수입니다. 한글과 같은 멀티바이트코드의 문자열을 위해서는 AnsiPos함수를 사용하셔야지 원하시는 값을 구하실 수 있습니다.

    한글코드에 대해서 공부좀 하세요...