반응형
글자가 한글인지 확인
목표:
두 바이트의 문자가 한글인지, 한자인지, 또는 그 외에 다른 문자인지 확인하는 함수를 만들려고 합니다.배경지식:
완성형 코드표에서 한글과 한자의 영역은 다음과 같습니다.- 완성형 글자 코드의 한글 영역: xxyyh (xx: B0h ~ C8h, yy: A1h ~ FEh)
- 완성형 글자 코드의 한자 영역: xxyyh (xx: CAh ~ FDh, yy: A1h ~ FEh)
- 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;
반응형