delphi7开发ISAPI网络服务器端程序时的UTF8问题,  内附源码 delphi7开发ISAPI服务器端程序时的UTF8问题,源码内有正确的地方和错误的地方的注释, 
高手帮忙看一下问题出在那儿 源码下载地址:http://www.tjxyh.com/test_utf8.rar

解决方案 »

  1.   

    kan yi xia zai shuo
      

  2.   

    var FileText:TStrings;
    begin//这里返回的UTF-8字符串错误
      FileText:=TStringList.Create;
      try
        FileText.LoadFromFile('utf8test.txt');
        Value:=FileText.Text;   
    {    //如果这里把返回串写为文件,则文件正确
        FileText.Clear;
        FileText.Text:=Value;
        FileText.SaveToFile('utf8test_re.txt');
    //}
      finally
        FileText.Free;
      end;
    end;
    // 变体不会自动转码的啊,你要自己转才行的,不转成ansi直接这么赋值是会有乱码的,用Utf8ToAnsi转化后,再去掉第一个字符就正常了
      

  3.   

    to:anthony634 
    Utf8ToAnsi转化后字符就成了GB2313的编码了,我的网页上的编码是UTF-8的,所以以用UTF-8编码的字符,这段时间我一直在测试,问题应该是出在WEBSNAP内部的脚本解释器上,也就是这个变体类型返回的是正确的,返回值送交脚本解释器后脚本解释器组合页面时出错了,或是说HTTPProd.pas里有地方可以处理,想跟踪进去,可没办法进行跟踪调试
      

  4.   

    UTF8Decode 
    UTF8Encode 试试
      

  5.   

    UTF8Decode,UTF8Encode只是进行UTF-8编解码用的函数,我要送过去的已经是正规UTF-8的编码了
      

  6.   

    FileText.LoadFromFile( 'utf8test.txt '); 这里你从文件读进来的UTF8编码里面是有文件头的,,我想你要传到网页脚本上去,要把前面的两个字节除掉才能正常的转,不然Value得到的应该不是纯正的UTF8编码。
      

  7.   

    procedure TPageProducerPage1.LocateFileServiceFindIncludeFile(
      ASender: TObject; AComponent: TComponent; const AFileName: String;
      var AFoundFile: String; var AHandled: Boolean);
    begin//Include引入的UTF-8文件正确
      AFoundFile:=getdllpath+AFileName;
    end;procedure TPageProducerPage1.PageProducerHTMLTag(Sender: TObject;
      Tag: TTag; const TagString: String; TagParams: TStrings;
      var ReplaceText: String);
    var FileText:TStrings;
    begin//透明位取值替换正确
      if TagString='test' then begin
        FileText:=TStringList.Create;
        try
          FileText.LoadFromFile('utf8test.txt');
          ReplaceText:=FileText.Text;
        finally
          FileText.Free;
        end;
      end;
    end;procedure TPageProducerPage1.A_testGetValue(Sender: TObject;
      var Value: Variant);
    var FileText:TStrings; s:string;
    begin
      FileText:=TStringList.Create;
      try
        FileText.LoadFromFile('utf8test.txt');
        Value:=FileText.Text;//这里返回的UTF-8字符串错误
        FileText.Clear;//清空数据
        FileText.Text:=Value;//把返回值重写入
        FileText.SaveToFile('utf8testre.txt');//写入到文件正确,证明返回值Value是正确的,
                                              //问题就出在Value这个值谁取走了,取走后再处理中那一步出的错
      finally
        FileText.Free;
      end;
      

  8.   

    问题没有解决,有人能帮助吗?或是我出RMB求解吧,能解决的请报价
      

  9.   

    问题没有解决,有人能帮助吗?或是我出RMB求解吧,能解决的请报价
      

  10.   

    delphi 对utf支持不太好,用ansi模式调试已经正常. :)
      

  11.   

    是的,ANSI是正常的,可是要求是UTF-8编码,否则也不会搞 了这么长时间了,我用调试模式跟踪进去,也没有找到谁在获取这个返回值,现在还在继续跟踪中,如果找到谁取走了这个值,再送回组合页,我想也就知道改那一个文件可以解决这个问题了,即然我搞 不出来,于是就想到人民币求解了,希望有高手可以帮到我