본문 바로가기
Delphi 예제 자료

Character set UTF8 Decode 번역

by kimsyo11 2021. 12. 13.
728x90

우선 인코딩 문자 내용을 인코딩 사이트에 입력해보았습니다

Character set 에다가 UTF8 Decode 하는 해당 내용이 나오더군요

 

 

 

그래서 해당 내용의 자바스크립트 내용을 참고하였습니다

해당 메인은 아래의 첫번째 사진의 화살표 방향이 메인입니다

그외에 필요한 구조 코드들입니다 이 기준으로 코드를 조금만 수정해서 돌려봅니다

 

 

 

돌려보니 원하시는 문자 결과내용을 가져왔습니다 자 그러면 이기준으로 델파이 언어로 번역하면 되겠죠

 

자 이렇게 Notepad++에 코드를 자바스크립트 포맷을 해주고 오른쪽 Delphi IDE를 편하게 코드를 짤수 있께 레이아웃

변경해서 짰습니다 코드 완성후 돌려보면 완벽하게 잘 나오는것을 볼수가 있습니다

 

 

function CharsetUTF8Decode(TmpStr : string) :string;
begin
  var TmpStrm := TStringList.Create;
  var I : integer := -1;

  while (I < TmpStr.Length) do
  begin
    inc(I);
    var c := Ord(TmpStr.Chars[I]);
    if c <= $7F then
      TmpStrm.Add(Copy(TmpStr,I+1,1))
      else if ($C0 <= c) and (c <= $DF) then
      begin
        inc(I);
        var c2 := Ord(TmpStr.Chars[I]);
        if ($80 <= c2) and (c2 <= $BF) then
        begin
          var o := ((c and $1F) shl 6) + (c2 and $3F);
          TmpStrm.Add(Chr(o));
        end else begin
          Result := 'invalid input';
          Exit;
        end;
      end else if ($E0 <= c) and (c <= $EF) then
      begin
        inc(I);
        var c2 := Ord(TmpStr.Chars[I]);
        inc(I);
        var c3 := Ord(TmpStr.Chars[I]);
        if ($80 <= c2) and (c2 <= $BF) and
        ($80 <= c3) and (c3 <= $BF) then
        begin
          var o := ((c and $F) shl 12) + ((c2 and $3F) shl 6) + (c3 and $3F);
          TmpStrm.Add(chr(o));
        end else begin
          Result := 'invalid input';
          Exit;
        end;
      end else if ($E0 <= c) and (c <= $EF) then
      begin
        inc(I);
        var c2 := Ord(TmpStr.Chars[I]);
        inc(I);
        var c3 := Ord(TmpStr.Chars[I]);
        inc(I);
        var c4 := Ord(TmpStr.Chars[I]);
        if ($80 <= c2) and (c2 <= $BF) and
        ($80 <= c3) and (c3 <= $BF) and
        ($80 <= c4)and (c4 <= $BF)then
        begin
          var o := ((c and 7) shl 18) + ((c2 and $3F) shl 12) + ((c2 and $3F) shl 6) + (c4 and $3F);
          TmpStrm.Add(chr(o));
        end else begin
          Result := 'invalid input';
          Exit;
        end;
      end else begin
        Result := 'invalid input';
        Exit;
      end;
  end;
  for var I1 : integer := 0 to TmpStrm.Count -1 do
  Result := Result + TmpStrm[I1];
  TmpStrm.Free;
end;
728x90

댓글