VB中:a:= StrConv(b, vbFromUnicode)
在Delphi中:如何表示?

解决方案 »

  1.   

    // Unicode String --> ANSI string 中文格式编码
    // eg. 0031003200610062554A94B1658C --> 12ab啊钱斌
    // OK! 20030208 QB
    function UnicodeToAnsi(sStr:String):String;
    var
      sStr1: string;
      wStr: WideString;
      psStr1,psStr: PChar;
      iUnicode,i,len: Integer;
    begin
      sStr1:='';
      // 为sStr1申请200字节的空间
      for i:=1 to 200 do sStr1:=sStr1+'-';
      psStr1:=PChar(sStr1);
      len:=Length(sStr);
      i:=1;
      while i<=len do
      begin
        // '554a' --> chr(0x55)+chr(0x4a)
        psStr:=PChar(sStr)+i-1;
        HexToBin(psStr, psStr1, 2);
        // chr(0x55)+chr(0x4a) --> 21834
        iUnicode:=ord(sStr1[1])*256+ord(sStr1[2]);
        // 21834 --> '啊'
        wStr:=wStr+WideChar(iUnicode);
        i:=i+4;
      end;
      Result:=String(wStr);
    end;// ANSI String --> Unicode string 中文格式编码
    // eg. 12ab啊钱斌 --> 0031003200610062554A94B1658C
    // OK! 20010710 QB
    // function AnsiToUnicode(var s:WideString):String;
    function AnsiToUnicode(sStr:String):String;
    var
      i,len: Integer;
      cur: Integer;
      t: String;
      s: WideString;
    begin
      // WideString('1啊') --> '1啊'
      s:= WideString(sStr);
      Result:='';
      // Length(WideString('1啊')) = 2 !!!
      len:=Length(s);
      i:=1;
      while i<=len do
      begin
        // Unicode of '啊' --> 21834
        cur:=ord(s[i]);
        // 21834 --> '554a'
        FmtStr(t,'%4.4X',[cur]); // ???? <-- 钱勤
        Result:=Result+t;
        inc(i);
      end;
    end;