Delphi 中使用的字符串是 GB2312 编码的字符集的 AnsiString 字符串吗?
如何获取STRING中某个字符对应的GB2312编码?

解决方案 »

  1.   

    delphi中的字符串不是GB2312,而是ANSI String,它只是被windows按照ACP代码页解释成用户设定locale的字符集,可以在 控制面板->区域和语言选项->高级->非unicode程序的语言 设定。
    而简体中文版的windows使用的也不是GB2312字符集,GB2312只包含不到7000个的简化字,连一般的繁体字都没有。按照国家标准,2000年以后的PC产品必须支持GB18030字符集。GB2312编码很简单,除ASCII字符外,剩下的都是2bytes,低位都是$A1..$FE,汉字区的高位是$B0..$F7(还有个自定义区$F8..$FE,可以不关心)
      

  2.   

    To Seamour:
      Thanks,还没有深入了解过字符的编码。但现在急需要获取String中的各个字符所对应的GB2312编码!要这样实现呢?请教
      

  3.   

    一个演示,效率我就不管了function GetAnsiEncodingAsGB2312(const S: AnsiString): AnsiString;
    var
      i, l  : Integer;
      p : PAnsiChar;
    begin
      p := Pointer(S);
      i := 0;
      l := Length(s);
      while(i<l)do
      case p[i] of
        #$01..#$7f : { ASCII }
        begin
          Result  := Format('%s%.2x ', [Result, Byte(p[i])]);
        Inc(i);
        end;
        #$A1..#$AF { 非汉字区与非汉字保留区 },
        #$B0..#$F7 { 汉字区 },
        #$F8..#$FE { 汉字保留区 }:
        begin { 这里就不检查低位在不在GB2312编码区了 }
          Result  := Format('%s%.4x ', [Result, MakeWord(Byte(p[i+1]), Byte(p[i])) ]);
          Inc(i, 2);
        end;
        else { 这里假设其它不在GB2312编码区的文字也是2字节编码,并在后面加个'?'标识一下 }
        begin
          Result  := Format('%s%.4x? ', [Result, MakeWord(Byte(p[i+1]), Byte(p[i])) ]);
          Inc(i, 2);
        end;
      end;
    end;
      

  4.   

    简单点
    function GetAnsiEncodingAsGB2312(const S: AnsiString): AnsiString;
    begin
    for i:=1 to length(s) do
         result:=result+‘ ’+inttohex(s[i],2);
    end;
      

  5.   

    顶Seamour
     
    (Seamour) 一个演示,效率我就不管了