Delphi unicode 数字转换成中文显示

12 篇文章 0 订阅
3 篇文章 0 订阅
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值