牛骨文教育服务平台(让学习变的简单)
博文笔记

Delphi unicode 数字转换成中文显示

创建时间:2015-04-28 投稿人: 浏览次数:945
function ProcessFormSource(mSource, mDest: TStrings): Boolean;
var
  I, J, K: Integer;
  S: string;
  vTempStr, vLeftStr: string;
  vWideByte: Integer;
begin
  Result := False;
  if not (Assigned(mSource) and Assigned(mDest)) then Exit;
  mDest.Clear;
  for I := 0 to mSource.Count - 1 do begin
    S := mSource[I];
    if Pos("#", S) > 0 then begin
      vTempStr := "";
      vLeftStr := "";
      K := 0;
      for J := 1 to Length(S) do
        case K of
          0: begin //空区
            case S[J] of
              """": begin
                K := 1;
                vLeftStr := vLeftStr + S[J];
              end;
              "#": K := 2;
            else vLeftStr := vLeftStr + S[J];
            end;
          end;
          1: begin //""""区
            if S[J] = """" then K := 0;
            vLeftStr := vLeftStr + S[J];
          end;
          2: begin //#区
            if S[J] in ["0".."9", "$", "a".."f", "A".."F"] then
              vTempStr := vTempStr + S[J]
            else begin
              K := Pos(S[J], """#");
              vWideByte := StrToIntDef(vTempStr, 0);
              if vWideByte <= 256 then begin
                vLeftStr := vLeftStr + "#" + vTempStr;
                if S[J] = """" then vLeftStr := vLeftStr + S[J];
              end else begin
                if Copy(vLeftStr, Length(vLeftStr), 1) = """" then
                  Insert(WideChar(vWideByte), vLeftStr, Length(vLeftStr))
                else vLeftStr := vLeftStr + QuotedStr(WideChar(vWideByte));
                if S[J] = """" then Delete(vLeftStr, Length(vLeftStr), 1);
              end;
              vTempStr := "";
            end;
          end;
        end;
        if K = 2 then begin
          vWideByte := StrToIntDef(vTempStr, 0);
          if vWideByte <= 256 then
            vLeftStr := vLeftStr + "#" + vTempStr
          else begin
            if Copy(vLeftStr, Length(vLeftStr), 1) = """" then
              Insert(WideChar(vWideByte), vLeftStr, Length(vLeftStr))
            else vLeftStr := vLeftStr + QuotedStr(WideChar(vWideByte));
          end;
        end;
        S := vLeftStr;
    end;
    mDest.Add(S);
  end;
  Result := True;

end; 

转载网址:http://bbs.csdn.net/topics/20034114

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。