본문 바로가기
Application/Delphi Lecture

글자가 한글인지 확인

by 현이빈이 2008. 7. 24.
반응형

글자가 한글인지 확인

목표:

두 바이트의 문자가 한글인지, 한자인지, 또는 그 외에 다른 문자인지 확인하는 함수를 만들려고 합니다.

배경지식:

완성형 코드표에서 한글과 한자의 영역은 다음과 같습니다.
  • 완성형 글자 코드의 한글 영역: xxyyh (xx: B0h ~ C8h, yy: A1h ~ FEh)
  • 완성형 글자 코드의 한자 영역: xxyyh (xx: CAh ~ FDh, yy: A1h ~ FEh)
따라서 글자가 한글인지 확인하려면 위의 두 범위 내에 드는지를 채크해 보면 되겠습니다. 참고로 다른 종류의 문자의 영역들은 다음과 같습니다. 'a', '+'같은 1바이트 문자(반각)는 여기에 포함되지 않습니다. 보기에는 같은 글자라도 2바이트 문자(전각)인 'a', '+'와 1바이트 문자(반각)인 'a', '+'는 전혀 틀린 문자입니다.
  • A1A1h ~ A2E5h: 기호와 약자 몇가지
  • A3A1h ~ A3FEh: 전각 문자
  • A4A1h ~ A4FEh: 한글자모
  • A5A1h ~ A5AAh: 소문자 로마숫자 (i~x)
  • A5B0h ~ A5B9h: 대문자 로마숫자 (I ~ X)
  • A5C1h ~ A5D8h: 대문자 그리스 문자
  • A5E1h ~ A5F8h: 소문자 그리스 문자
  • A6A1h ~ A6E4h: 라인 문자
  • A7A1h ~ A7EFh: 단위
  • A8A1h ~ A8B0h: 대문자 발음기호
  • A8B1h ~ A8BEh: 원문자 한글 자음 (ㄱ~ㅎ)
  • A8BFh ~ A8CCh: 원문자 가나다 (가~하)
  • A8CDh ~ A8E6h: 원문자 영문 소문자 (a~z)
  • A8E7h ~ A8F5h: 원문자 숫자 (1~15)
  • A8B1h ~ A8BEh: 분수 (1/2, 1/3, 2/3, 1/4, 3/4, 1/8, 3/8, 5/8, 7/8)
  • A9A1h ~ A9B0h: 소문자 발음기호
  • A9B1h ~ A9BEh: 괄호문자 한글 자음 (ㄱ~ㅎ)
  • A9BFh ~ A9CCh: 괄호문자 가나다 (가~하)
  • A9CDh ~ A9E6h: 괄호문자 영문 소문자 (a~z)
  • A9E7h ~ A9F5h: 괄호문자 숫자 (1~15)
  • A9B1h ~ A9BEh: 위, 아래첨자 (1, 2, 3, 4, n, 1, 2, 3, 4)
  • ABA1h ~ ABF3h: 가타카나
  • ABA1h ~ ABF6h: 히라가나
  • ACA1h ~ ACC1h: 키릴 문자 대문자
  • ACD1h ~ ACF1h: 키릴 문자 소문자

코드:

// HanType
// Programmed by Jounlai Cho (jounlai@yahoo.com)
type
  THanType = (htHangul, htHanja, htOther);
  
function GetHanType(const Src: string): THanType;
var
  Len, Hi, Lo: Integer;
begin
  Result := htOther;
  if Length(Src) < 2 then Exit;
  Len := Length(Src);
  Hi := Ord(Src[Len - 1]);
  Lo := Ord(Src[Len]);
  if ($A1 > Lo) or ($FE < Lo) then Exit;
  if ($B0 <= Hi)  and ($C8 >=  Hi) then
    Result := htHangul
  else if ($CA <= Hi) and ($FD >= Hi) then 
    Result := htHanja;
end;
반응형