数据库的增、删、修改都没问题,可是处理中文全成乱码!!!
谁有什么解决方法吗?分不够可以加哦

解决方案 »

  1.   

    我也遇到这样的问题,但我解决了。我想问问你的数据库的增、删、修改是如果实现的?直接用TClientDataSet.ApplyUpdates(0)?
    因为我要知道了你的实现方法我才能答你。我们的实现方法比较特别。
      

  2.   

    因为事无状态的所有只能组织sql语句,执行来完成数据库的增、删、修改
      

  3.   

    配置apache服务器中的
    conf/httpd.conf文件,查找
    AddDefaultCharset ISO-8859-1
    改成
    #AddDefaultCharset ISO-8859-1
    AddDefaultCharset GB2312修改完成后重新启动Apache,如果不行,请重新启动系统。
      

  4.   

    我用的apache是1.3.28版本
    在conf/httpd.conf文件,没有查找到AddDefaultCharset ISO-8859-1
    自己添加了AddDefaultCharset GB2312
    可是还是不行
      

  5.   

    另外我用的是apache的dso方式,编译apache的选项是
    ./configure --with-layout=Apache --enable-module=so --enable-shared=max --enable-rule=SHARED_CORE
    是否少了什么东西?
      

  6.   

    这些都不关 Apache 的事。无论你怎么设置都是不行的。
    问一下你:你能否(懂否)调用在 Application server (Web service)写的方法?
    这要用到客户端调用应用服务器的方法,要传SQL过去在Linux下运行,当然SQL是经过处理的。直接用TClientDataSet.Execute是不行的。
      

  7.   

    你可以去看看李维写的delphi/kylix2 soap/webservice上怎样调用 Application server (Web service)写的方法,直接用TClientDataSet.Execute也是可以的。
      

  8.   

    我把我的实现方法给你吧:
    --------------------------------------------------
    Application server:function TfssdmHighway.DecodeSQL(SQL: string): string;
    begin
      Result := '';
      while SQL <> '' do
      begin
        try
          Result := Result + Chr(StrToInt(Copy(SQL, 1, 3)));
        except
        end;
        System.Delete(SQL, 1, 3);
      end;
    end;function TfssdmHighway.ExecSQLs(const vSQLs: TStringDynArray; Encoded: Boolean): Boolean;
    var
      I: Integer;
      aTD: TTransactionDesc;
      sqUpdate: TSQLQuery;
    begin
      sqUpdate := TSQLQuery.Create(Self);
      try
        sqUpdate.SQLConnection := SQLCHighway;
        aTD.TransactionID := 1;
        SQLCHighway.StartTransaction(aTD);
        try
          for I := Low(vSQLs) to High(vSQLs) do
          begin
            if vSQLs[I] = '' then
              Continue;
            sqUpdate.Close;
            sqUpdate.SQL.Text := vSQLs[I];
            if Encoded then
              sqUpdate.SQL.Text := DecodeSQL(sqUpdate.SQL.Text);
            sqUpdate.ExecSQL(True);
          end;
          SQLCHighway.Commit(aTD);
          Result := True;
        except
          on E: Exception do
          begin
            SQLCHighway.Rollback(aTD);
            WriteLog(FormatDateTime('yyyy.mm.dd  HH:MM:SS '#13#10, Now) +
              sqUpdate.SQL.Text + #13#10 + E.Message);
            Result := False;
          end;
        end;
      finally
        FreeAndNil(sqUpdate);
      end;
    end;
    --------------------------------------------------
    --------------------------------------------------
    Client:function  EncodeSQL(SQL: string): string;
    var
      I: Integer;
    begin
      Result := '';
      SQL := AnsiString(SQL);
      for I := 1 to Length(SQL) do
        Result := Result + FormatFloat('000', Ord(SQL[I]));
    end;
    function  SQLsExecute(SQLs: array of string; Encoded: Boolean = False): Boolean;
    var
      SQLsToServer: TStringDynArray;
      I, iLow: Integer;
    begin
      SetLength(SQLsToServer, High(SQLs) - Low(SQLs) + 1);
      iLow := Low(SQLsToServer);
      for I := Low(SQLs) to High(SQLs) do
      begin
        SQLsToServer[iLow] := SQLs[I];
        if Encoded then
          SQLsToServer[iLow] := EncodeSQL(SQLsToServer[iLow]);
        Inc(iLow);
      end;
      Result := GetIssdmHighway(False, GetURL).ExecSQLs(SQLsToServer, Encoded);
    end;--------------------------------------------------含中文的SQL执行问题解决!!
      

  9.   

    这样我想肯定是可以的,非常感谢你,结帖的时候我再给分。
    其实用TIdBase64Encoder,TIdBase64Decoder我想也可以达到同样的效果。
    网上有篇文章http://www-900.ibm.com/developerWorks/cn/webservices/ws-ejbacess/index.shtml#1
    其中提到:
    Delphi Web Service中文问题 
    通过监控SOAP调用的全过程我们发现Delphi向Web Server提出HTTP请求的时候,数据是以UTF-8编码通过POST方式提交给Web服务器的,但是另一方面,Delphi在HTTP请求头中设置Content-Type为text/xml,造成Apache SOAP Toolkit认为POST方式的数据是iso8859-1编码,出现了所谓中文问题。
    我们可以设置Delphi在提出HTTP请求的时候设置Content-Type为text/xml; charset= UTF-8。具体做法是在创建了 THTTPRio对象之后设置它的属性UseUTF8InHeader 
    X.HTTPWebNode.UseUTF8InHeader := true ;
    需要注意SoapHTTPTrans.pas代码 header := 'text/xml charset=UTF-8'; 当中少了一个分号";",这造成服务器认为soap 客户程序POST上来的数据是iso8859-1编码。
    在Delphi选择Project > Add to Project,加入Delphi6\Source\Soap\SoapHTTPTrans.pas。修改该行代码为:header := 'text/xml; charset=UTF-8';可是,我还是没有解决乱码问题,不知哪位大侠能指点一二!!!
      

  10.   

    这样我想肯定是可以的,非常感谢你,结帖的时候我再给分。
    其实用TIdBase64Encoder,TIdBase64Decoder我想也可以达到同样的效果。
    网上有篇文章http://www-900.ibm.com/developerWorks/cn/webservices/ws-ejbacess/index.shtml#1
    其中提到:
    Delphi Web Service中文问题 
    通过监控SOAP调用的全过程我们发现Delphi向Web Server提出HTTP请求的时候,数据是以UTF-8编码通过POST方式提交给Web服务器的,但是另一方面,Delphi在HTTP请求头中设置Content-Type为text/xml,造成Apache SOAP Toolkit认为POST方式的数据是iso8859-1编码,出现了所谓中文问题。
    我们可以设置Delphi在提出HTTP请求的时候设置Content-Type为text/xml; charset= UTF-8。具体做法是在创建了 THTTPRio对象之后设置它的属性UseUTF8InHeader 
    X.HTTPWebNode.UseUTF8InHeader := true ;
    需要注意SoapHTTPTrans.pas代码 header := 'text/xml charset=UTF-8'; 当中少了一个分号";",这造成服务器认为soap 客户程序POST上来的数据是iso8859-1编码。
    在Delphi选择Project > Add to Project,加入Delphi6\Source\Soap\SoapHTTPTrans.pas。修改该行代码为:header := 'text/xml; charset=UTF-8';可是,我还是没有解决乱码问题,不知哪位大侠能指点一二!!!