한글 초/중/종성 알아내기
type
TCVJ = packed record //초성 중성 종성의 번호를 저장할 구조체
C :integer;
V :integer;
J :integer;
end;
const
//유니코드 한글 초성 순서표
UniCodeC : array [0..18] of string = ('ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ', 'ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ'); //유니코드 한글 중성 순서표
UniCodeV : array [0..20] of string = ('ㅏ','ㅐ','ㅑ','ㅒ','ㅓ','ㅔ','ㅕ','ㅖ','ㅗ','ㅘ', 'ㅙ','ㅚ','ㅛ','ㅜ','ㅝ','ㅞ','ㅟ','ㅠ','ㅡ','ㅢ', 'ㅣ');
//유니코드 한글 종성 순서표
UniCodeJ : array [0..27] of string = (' ','ㄱ','ㄲ','ㄳ','ㄴ','ㄵ','ㄶ','ㄷ','ㄹ','ㄺ','ㄻ', 'ㄼ','ㄽ','ㄾ','ㄿ','ㅀ','ㅁ','ㅂ','ㅄ','ㅅ','ㅆ', 'ㅇ','ㅈ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');
function chk_cvj(str:String):TCVJ;
var
res:TCVJ; //변환한 초성 중성 종성 값을 넘길 변수
cCode,vCode,jCode:integer; //유니코드 한글에서의 초성/중성/종성의 코드값
lpszW:WideString;
begin
lpszw := WideString(str);
// MultiByteToWideChar(CP_ACP, 0, PChar(inputSyllable), -1, lpszW, 256);
// MultiByteToWideChar(CP_UTF8, 0, PChar(inputSyllable), -1, lpszW, 4);
// cCode := (word(lpszW[0]) - $AC00) / 588;
//588=21*28(초성)
cCode := (Integer(lpszW[1]) - $AC00); //588=21*28(초성)
// vCode :=((Integer(lpszW[1]) - $AC00) mod (588)) / 28; //588=21*28(중성)
vCode :=((Integer(lpszW[1]) - $AC00) mod (588)) ; //588=21*28(중성)
jCode :=(Integer(lpszW[1]) - $AC00) mod 28;//(종성)
res.C:=trunc(ccode/588);
res.V:=trunc(vcode/28);
res.J:=jCode;
result := res;
end;
'Delphi Tip > 문자' 카테고리의 다른 글
한글(2Byte)문자열 깨지지 않게 자르기 (0) | 2024.07.08 |
---|---|
델파이 2진수 변환(Binaryconversion) (0) | 2024.06.13 |
델파이 UTF-8 (0) | 2023.11.15 |
Case문으로 문자 비교하기 (0) | 2023.11.08 |
String 을 PAnsiChar 변환 (0) | 2021.10.14 |
댓글