比如说“创建”在繁体里面显示“?建”问题如上,请高手指教!如何解决呀?

解决方案 »

  1.   

    程序拿到不同的系统下使用时,需要设置相应的Charset。
      

  2.   

    设置过,但是没有变化。
    简体用GB2312_CHARSET 繁体下CHINESEBIG5_CHARSET应该没有问题吧
      

  3.   

    http://borland.mblogger.cn/aiirii/posts/1624.aspx
      

  4.   

    那么说这个是Delphi的问题喽?
      

  5.   

    你确实使用的UNICODE的组件开发的程序吗?如果不是,你如何保证保存到数据库中的是Unicode的字符的?如果数据库并非用Unicode的,假设数据库里只保存简体中文,那么在繁体系统上,当从数据库中读取文字和写入文字前都做一个简繁转换,以前我做过这样的控件,直接放置到窗体上,并且设置一下,让它绑定到某个TCustomDataSet上就可以了
    我回去后找找。
      

  6.   

    tonylk多謝多謝![email protected]
      

  7.   

    unit CDConvetor;interfaceuses
      Windows, Messages, SysUtils, Classes, DB;type
      TConvertType = (ctNone, ctGB2BIG5, ctBIG52GB);  TChineseDataConvetor = class (TComponent)
      private
        FDataSet:TDataSet;
        FActive:Boolean;
        FInputConvert:TConvertType;
        FOutputConvert:TConvertType;
        FOldOnDataSetAfterOpen:TDataSetNotifyEvent;
      protected
        procedure SetDataSet(AValue:TDataSet);
        procedure OnDataSetAfterOpen(DataSet:TDataSet);
        procedure OnFieldGetText(Sender:TField;var Text:String;DisplayText:Boolean);
        procedure OnFieldSetText(Sender:TField;const Text:String);
      public
        constructor Create(AOwner:TComponent);override;
        destructor Destroy();override;
      published
        property DataSet:TDataSet read FDataSet write SetDataSet;
        property Active:Boolean read FActive write FActive default true;
        property InputConvert:TConvertType read FInputConvert write FInputConvert default ctGB2BIG5;
        property OutputConvert:TConvertType read FOutputConvert write FOutputConvert default ctBIG52GB;
      end;procedure Register;implementationuses
      CVCode;procedure Register;
    begin
      RegisterComponents ('Standard', [TChineseDataConvetor]);
    end;{ TChineseDataConvetor }procedure TChineseDataConvetor.SetDataSet(AValue:TDataSet);
    begin
      if FDataSet<>AValue then begin
        if Assigned(FDataSet) then begin
          FDataSet.AfterOpen:=FOldOnDataSetAfterOpen;
        end;
        FDataSet:=AValue;
        if Assigned(FDataSet) then begin
          FOldOnDataSetAfterOpen:=FDataSet.AfterOpen;
          FDataSet.AfterOpen:=OnDataSetAfterOpen;
        end;
      end;
    end;procedure TChineseDataConvetor.OnDataSetAfterOpen(DataSet:TDataSet);
    var
      I:Integer;
    begin
      if Assigned(FOldOnDataSetAfterOpen) then begin
        FOldOnDataSetAfterOpen(DataSet);
      end;
      for I:=0 to DataSet.Fields.Count-1 do begin
        DataSet.Fields[I].OnGetText:=OnFieldGetText;
        DataSet.Fields[I].OnSetText:=OnFieldSetText;
      end;
      if not DataSet.Eof then begin
        DataSet.First;
      end;
    end;procedure TChineseDataConvetor.OnFieldGetText(Sender:TField;var Text:String;DisplayText:Boolean);
    begin
      if (not FActive) or (FOutputConvert=ctNone) then begin
        Text:=Sender.AsString;
      end
      else if (FOutputConvert=ctGB2BIG5) then begin
        Text:=GBtoBIG5(Sender.AsString);
      end
      else if (FOutputConvert=ctBIG52GB) then begin
        Text:=BIG5toGB(Sender.AsString);
      end;
    end;procedure TChineseDataConvetor.OnFieldSetText(Sender:TField;const Text:String);
    begin
      if (not FActive) or (FInputConvert=ctNone) then begin
        Sender.AsString:=Text;
      end
      else if (FInputConvert=ctGB2BIG5) then begin
        Sender.AsString:=GBtoBIG5(Text);
      end
      else if (FInputConvert=ctBIG52GB) then begin
        Sender.AsString:=BIG5toGB(Text);
      end;
    end;constructor TChineseDataConvetor.Create(AOwner:TComponent);
    begin
      inherited Create(AOwner);
      FActive:=true;
      FInputConvert:=ctGB2BIG5;
      FOutputConvert:=ctBIG52GB;
    end;destructor TChineseDataConvetor.Destroy();
    begin
      if Assigned(FDataSet) then begin
        FDataSet.AfterOpen:=FOldOnDataSetAfterOpen;
      end;
      inherited Destroy();
    end;end.请将控件安装后使用,没有真正验证过,我还不确定这样做的可行性,你可以试试。。
      

  8.   

    TO : tonylk
    请问cvcode单元能够实现简体转成繁体,繁体转成简体么。
    我下了一个cvcode单元试了一下只能GB-》BIG5,并且是一个字一个字的转化,能
    不能对整个数据集进行转换为简体或繁体,因为要在dbgrid控件中显示。
      

  9.   

    CVCode有繁-〉简,简-〉繁两套代码阿,我贴上面代码时忘贴了,回去再找找。
    确实是一个字一个字转的,不然还向怎么样。。
    你要对整个数据库进行转就写个批处理,或者用触发器,每当有新纪录添加,就进行转换。。
      

  10.   

    waiting ......................
    奇怪,数据库可以存简体和繁体,程序用dbgrid在简体系统可以显示简繁体字,为什么在繁体系统繁体字可以,简体字就不行,,,,纳闷中.....
    谁有妙策...