Delphi既然引入了WideChar类型,为什么又不能直接象Char类型一样使用?请看下面的例子,c:='x'是对的但后面两句对wideChar赋值却出错:Incompatible types:'WideChar' and 'String'。既如此,WideChar还有什么用,该怎么用?procedure TForm1.Button1Click(Sender: TObject);
var
  wc: WideChar;
  c: Char;
begin
  c:='x';
  wc:='伟';
  wc:='П';
  showMessage(wc);
end;

解决方案 »

  1.   

    楼主可以参见帮助里AnsiChar和WideChar的区别
      

  2.   

    wc: WideString;
    showMessage(wc[1]);
      

  3.   

    WideChar不是处理Unicode字符吗,难道一个汉字不就是unicode中的一个字符?
      

  4.   

    首先c:='x'; 的机理,就是把数据段中的数据赋值给变量。'x'默认就是string。就WideString这个,实在是没有好办法,因为delphi对这个支持的就是很差劲。delphi在AnsiString和AnsiChar的一些操作都是内联的,没必要关心的,但是WideString 还有 WideChar就不行。而且,delphi类型检测出奇的严格。根本没有办法。如果procedure TForm1.Button1Click(Sender: TObject);
    var
      wc: WideChar;
      ws: WideString;
    begin
      ws := 'П';
      wc:= ws[1];
      showMessage(wc);
    end;你可以用:{$R-}躲过范围检查。可以声明常量:const
      x: WideString = 'П';来用,但是还是很麻烦。没有见到好方法。
      

  5.   

    wc: WideString;
    showMessage(wc[1]);也就是说WideChar非要通过WideString来使用?
      

  6.   

    主要是你使用wc:='П';的操作,'П'是保存在数据段的一个常量,不是Unicode。毕竟delphi不是给我们这些人设计的。
      

  7.   

    你可以这样用var
      wc:WideChar;
    begin
      wc:=#65;
    end;WideChar的范围是#0..#65535,这之间的都可以用。
    '伟'超过一个字节就被看成string类型了。
      

  8.   

    flyforlove(为情飞)说的有道理。因为是两个字节,被认为是串了。我尝试const
      x: WideString = 'П';取出来的x[1]就不是正确的。还得转化。就得用一步WideString变量转化一下,忍忍吧。没办法的事情