环境:Ubuntu12.04LTS,印度10.5.9rev 4885,Lazarus1.0.4/FPC2.6.0。
使用我的简单tidhttpserver测试程序,web浏览器只显示最后一个字符('!')而不是完整的回答,应该是“你好,世界!”是的。
我可以看到在函数ToBytes(idglobal.pas中的6059行)中,passed avlaue参数中的文本仍然正确,asrcencoding是tidascienceding,而adestencoding是'iso-8559-1'。在执行第6061行(lbytes:=tidtextencoding.convert(asrcencoding,adestencoding,lbytes);)之后,lbytes数组包含33,后跟零。
我的示例项目:

program MyHTTPServer;

uses
  cthreads,
  IdHTTPServer, IdCustomHTTPServer, IdContext, IdSocketHandle, IdGlobal,
  SysUtils;

type
  TMyServer = class (TIdHTTPServer)
  public
    procedure InitComponent; override;
    procedure OnGet(AContext: TIdContext;
    ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
  end;

procedure Demo;
var
  Server: TMyServer;
begin
  Server := TMyServer.Create(nil);
  try
    Server.Active := True;
    WriteLn('Hit any key to terminate.');
    ReadLn;
  finally
    Server.Free;
  end;
end;

procedure TMyServer.InitComponent;
var
  Binding: TIdSocketHandle;
begin
  inherited;

  OnCommandGet := OnGet;

  Bindings.Clear;
  Binding := Bindings.Add;
  Binding.IP := '127.0.0.1';
  Binding.Port := 8080;
  Binding.IPVersion := Id_IPv4;
end;

procedure TMyServer.OnGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  AResponseInfo.ContentText := 'Hello world!';
end;

begin
  IdGlobal.GIdIconvUseTransliteration := True;

  Demo;
end.

最佳答案

此问题已在SVN Trunk版本4889中修复。

07-28 01:33