在http://expert.csdn.net/Expert/topic/2415/2415655.xml?temp=.3184931中,
你的方法对于中文好像不起作用,是不是编码上有什么奥妙。
‘人’的unicode用delphi转出来是4EBA。你是怎么转成CBC8的?(用CBC8能推出人)

解决方案 »

  1.   

    你是怎麼推出 4EBA 來的??
      

  2.   

    function Encode2(var s:WideString):String;
    var i,len:Integer; cur:Integer; t:String;
    begin
      Result:='';
      len:=Length(s);
      i:=1;
     while i<=len do
     begin cur:=ord(s[i]);
       FmtStr(t,'%4.4X',[cur]);
       Result:=Result+t;
       inc(i);
      end;
    end;可以推出4EBA
      

  3.   

    兩種方法不同的, 對應你上個貼子的取法, 要修改如下才能得到 '人' 的正确值;
    function Encode2(var s: String):String;
    var i,len:Integer; cur:Integer; t:String;
    begin
      Result:='';
      len:=Length(s);
      i:=1;
     while i<=len do
     begin cur:=ord(s[i]);
       FmtStr(t,'%4.4X',[cur]);
       showmessage(inttohex(cur, 2));
       Result:=Result+t;
       inc(i);
      end;
    end;
      

  4.   

    4EBA是widestring的“人”的编码。  length(人)=1
    CBC8是string的“人”的码。        length(人)=2怎么解决widestring的转换呢?
    晕啊
      

  5.   

    type
      TUnichar = packed record
        case Integer of
          0: (s: array[0..3] of widechar);
          1: (x: Integer);
      end;function GetUnichar(Value: Integer): string;
    var
      c: TUnichar;
    begin
      c.x := Value;
      Result := c.s;
    end;
      

  6.   

    to aunzou(aunzou): 也許先將 widestring 轉為 string 後, 再轉, 比較簡單!!!
      

  7.   

    我不知道你的4EBA是怎么得来的,通过我写的结构可以反推值:type
      TUnichar = packed record
        case Integer of
          0: (s: array[0..3] of char);
          1: (x: Integer);
      end;
    function GetUnichar(Value: Integer): string;
    var
      c: TUnichar;
    begin
      c.x := Value;
      Result := c.s;
    end;function GetUnicharValue(Value: string): Integer;
    var
      c: TUnichar;
    begin
      Move(Value[1], c.s, 2);
      c.s[2] := #0;
      Result := c.x;
    end;
      

  8.   

    我知道了,使用wideString,对以上代码稍作改动就行了,'人'果然等于$4EBA:type
      TUnichar = packed record
        case Integer of
          0: (s: array[0..3] of widechar);
          1: (x: Integer);
      end;
    function GetUnichar(Value: Integer): widestring;
    var
      c: TUnichar;
    begin
      c.x := Value;
      Result := c.s;
    end;function GetUnicharValue(Value: widestring): Integer;
    var
      c: TUnichar;
    begin
      Move(Value[1], c.s, 2 * sizeof(widechar));
      c.s[2] := #0;
      Result := c.x;
    end;
      

  9.   

    是啊
    case integer of
    0:(s:widechar);
    1:(x:integer);
    就行了能讲讲这个结构是怎么理解的吗?
      

  10.   

    这是一个变体记录,s和x共享同样的内存地址,当s是char数组时,array[0..3]是4字节,Integer也是4字节,因此给谁赋值,都可以以另一个类型获得值,相当于实行了转换;当s是widechar时。array[0..3]有8字节,但一个widestring汉字只有4字节,所以x仍然可以实行转换。