把以unicode编码的字符串转化成以gb编码的字符串?

解决方案 »

  1.   

    http://www.nssoft.net/showdoc.asp?did=461
    Unicode格式:我们都知道,Windows2000的记事本,可以保存数据为Unicode的格式,那么在记事本中输入的文字,如何保存到文件里面呢?原来,Unicode的文本和数据,在开始的时候,会有两个字节的标记:FF FE,如果一个Txt文件,开头两个字节是FF FE,那么记事本就认为它是Unicode的格式!此后,每一个符号数据都是以两个字节来保存的!因此,如果你输入了ab两个字母,那么文件的长度就是:2 + 4=6Byte!MultiByteToWideCharWideCharToMultiByte把一个数字如8bd5变成Unicode字符:Result:=WideChar($8bd5) function GB2Unicode(GB:string):string;vars: string;i, j, k: integer;a: array [1..1000] of char;begins:='';StringToWideChar(GB, @(a[1]), 500);i:=1;while ((a[i]<>#0) or (a[i+1]<>#0)) do beginj:=Integer(a[i]); k:=Integer(a[i+1]);s:=s+Copy(Format('%X ',[k*$100+j+$10000]) ,2,4);i:=i+2;end;Result:=s;end;简体和繁体转换:请参看MSDN的APILCMapString它可以实现GB和big5和Unicode之间的转换,不需要什么对照表。
      

  2.   

    function DecodeChinese(Inputstr:String):String;
    var
      Buf:array[0..70] of widechar;
      len,i:integer;
    begin
            len := round(Length(InputStr)/4)-1;
            for i:=0 to Len do
            begin
                    buf[i] := widechar(StrToint('$'+copy(InputStr,4*i+1,4)));
            end;
            buf[i] := #0;
            result := WideCharToString(Buf)
    end;