请选择 进入手机版 | 继续访问电脑版

Lazarus中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 2186|回复: 3

Indy 中文乱码

[复制链接]

该用户从未签到

发表于 2015-11-9 14:09:52 | 显示全部楼层 |阅读模式
操作系统 中文 Win7 64位

服务端 DelphiXE6  indy 10.6.0.5122
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  S: String;
begin
  if AContext.Connection.Connected then
  begin
      S := AContext.Connection.Socket.ReadLn(enUTF8);
      Memo1.Lines.Add(S);   
      S := 'Accept: 我收到了';
      AContext.Connection.Socket.WriteLn(S, enUTF8);
  end;
end;

客户端  Lazarus 1.4.4  indy 10.6.0  indy-10.2.0.3
var
  s: String;
begin
  s := Edit1.Text;
  memo1.Append('Send: ' + S);
  idClient.Socket.WriteLn(s, enUTF8);
  sleep(500);
  S := idClient.Socket.ReadLn(enUTF8);
  memo1.lines.add('Rec: ' + S);
end;                           

服务端 客户端接收到的中文都是乱码,不知为何?有没有解决方法?
回复

使用道具 举报

  • TA的每日心情
    擦汗
    昨天 05:41
  • 签到天数: 980 天

    [LV.10]以坛为家III

    发表于 2015-11-10 08:56:32 | 显示全部楼层
    Lazarus使用的是UTF8编码,所以字符串要通过AnsiToUTF8以及UTF8ToAnsi进行转换。

    Good Luck~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主 发表于 2015-11-10 10:52:16 | 显示全部楼层
    本帖最后由 sehe 于 2015-11-10 10:53 编辑

    客户端代码修改, 服务端发送给客户端的中文正常,但客户端发给服务端的中文还是乱码
    var
      s: String;
    begin
      s := Edit1.Text;
      memo1.Append('Send: ' + S);
      idClient.Socket.WriteLn(UTF8Decode(s), enUTF8);
      sleep(500);
      S := UTF8Encode(idClient.Socket.ReadLn(enUTF8));
      memo1.lines.add('Rec: ' + S);
    end;                 

    服务端代码加 UTF8Decode  UTF8Encode 也不行,接收客户端的中文都是乱码
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主 发表于 2015-11-11 18:37:49 | 显示全部楼层
    问题解决,还是编码问题。 UTF8Decode  UTF8Encode 反复测试才得到结果。
    回复 支持 反对

    使用道具 举报

    QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1

    GMT+8, 2019-6-26 02:52 , Processed in 0.123309 second(s), 21 queries .

    Powered by Discuz! F1.0 Build 20160930

    © 2001-2019 Comsenz Inc. & Discuz! Fans

    快速回复 返回顶部 返回列表