CVcode 의 간단 한 변환 확장:GBK 와 Big 5 변환

CVcode 는 메타 대조 방식 으로 간단 하고 복잡 한 전환 을 실현 하 는데 유 니 코드 가 성행 하 는 오늘날 에 도 현실 적 인 의 미 를 가진다.  흔히 볼 수 있 는 응용 프로그램 은 기업 내 에 대만 국적 의 직원 도 있 고 대륙 직원 도 있 으 며 간 체 와 번 체 의 OS 도 모두 사용 되 고 있다 는 것 이다.그러면 MIS 시스템 에서 GB 2312,GBK,BIG 5 가 정상적으로 사용 할 수 있 도록 어떻게 보장 하 는 지,그리고 BIG 5 가 입력 한 자 료 는 GBK 시스템 에서 정상 적 이 고 GB 2312 에 입력 한 문자 와 일치 해 야 한다(조회 에서 명칭 에 따라 조회 하 는 것 이 가장 흔 하 다).  이러한 응용 에 대해 CVcode 는 메타 대조 방식 을 제공한다.이론 적 으로 말 하면 메타 를 잘 정의 하면 BIG 5 와 GB 2312 가 진정 으로'상호 연결'할 수 있다.
  그러나 CVcode 에 서 는 GB 2312 와 BIG 5 의 전환 일 뿐 GBK 입력 법 이 유행 하 는 오늘날 GB 2312 는 분명히 부족 하 다.또한 BIG 5 문자 집합 은 GB 2312 보다 훨씬 크기 때문에 CVcode 를 확장 하여 GBK 와 BIG 5 변환 기능 을 가지 도록 하 는 것 이 필수 적 이다.
  GBK 의 문자 범 위 는 다음 과 같 습 니 다.
이 중 1 과 2 가 해당 하 는 GB 2312 문자 집합 이다.
  어떻게 하면 CVcode 가 GBK 를 지원 할 수 있 는 지 세 가지 문제 가 있 습 니 다.    1.GB 사이즈 판단    2.문자 순 서 를 계산한다    3.기 존 메타 와 호 환
첫 번 째 문 제 는 다음 과 같이 IsGB 를 수정 해 야 합 니 다.
GBK     
                                 <
----------------------------------------------
●GBK/1:GB2312     : A1~A9 || A1~FE
●GBK/2:GB2312        : B0~F7 || A1~FE
●GBK/3:            : 81~A0 || 40~FE
●GBK/4:            : AA~FE || 40~A0
●GBK/5:           : A8~A9 || 40~A0

두 번 째 는 순 서 를 계산 하고 기 존의 메타 와 호 환 해 야 한다-사실은 호 환 도 주로 순서 에 있다.
function isGB(value: string): Boolean;
Var
  mHigh, mLow : integer;
begin
  if (length(value)>=2) then
  begin
    mHigh := ord(value[1]);
    mLow := ord(value[2]);
    Result := False;
    //●GBK/1:GB2312     : A1~A9 || A1~FE
    if (mHigh in [$A1..$A9]) and (mLow in [$A1..$FE]) then Result := True;
    //●GBK/2:GB2312        : B0~F7 || A1~FE
    if (mHigh in [$B0..$F7]) and (mLow in [$A1..$FE]) then Result := True;
    //●GBK/3:            : 81~A0 || 40~FE
    if (mHigh in [$81..$A0]) and (mLow in [$40..$FE]) then Result := True;
    //●GBK/4:            : AA~FE || 40~A0
    if (mHigh in [$AA..$FE]) and (mLow in [$40..$A0]) then Result := True;
    //●GBK/5:           : A8~A9 || 40~A0
    if (mHigh in [$A8..$A9]) and (mLow in [$40..$A0]) then Result := True;
  end
  else
    Result := true;
{  //     ,  GB2312     
  if (length(value)>=2) then
  begin
    if (value[1] <= #161) and (value[1] >= #247) then
      Result := false
    else
      if (value[2] <= #161) and (value[2] >= #254) then
        Result := false
      else
        Result := true
  end
  else
    Result := true;
    }
end;

좋은 웹페이지 즐겨찾기