utf8转gb

function unicode2gb(const unicodestr:string):string;
var SourceLength:integer;
  DoneLength:integer;
  AscNo:integer;
  Byte1,Byte2,Byte3:integer;
  GbStr:string;
begin
 GbStr:='';
 if Trim(unicodestr)='' then exit;

 SourceLength:=Length(UnicodeStr);
 DoneLength:=1;
 repeat
  AscNo:=ord(UnicodeStr[DoneLength]);
  case (AscNo and $E0) of
  $E0:begin
     Byte1:=(AscNo and $0f) shl 12;
     Inc(DoneLength);
     if DoneLength>SourceLength then break;
     AscNo:=ord(UnicodeStr[DoneLength]);
     Byte2:=(AscNo and $3f) shl 6;
     Inc(DoneLength);
 
     if DoneLength>SourceLength then break;
     AscNo:=ord(UnicodeStr[DoneLength]);
     Byte3:=AscNo and $3f;
    end;
  $C0:begin
     Byte1:=(AscNo and $1f) shl 6;
     Inc(DoneLength);
     if DoneLength>SourceLength then break;
     AscNo:=ord(UnicodeStr[DoneLength]);
     Byte2:=(AscNo and $3f);
     Byte3:=0;
    end;
  0..$bf:begin
     Byte1:=AscNo;
     Byte2:=0;
     Byte3:=0;
    end;
  end;//case;
   GbStr:=GBStr+widechar(Byte1+Byte2+Byte3);
   Inc(DoneLength);
   if DoneLength>SourceLength then break;
 until DoneLength>=SourceLength;
 result := GbStr;
end; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值