Delphi TIdTCPClient.IOHandler.Write(TStream)无法发送Big5?
通过TCPClient.IOHandler.WriteStmMsg;,消息被传送到前端。英语没问题,但Big5无法发送,为什么 TStringStream,程序已添加。。。TCPClient.IOHandler.DefStringEncoding:=IndyTextEncoding\u UTF8 代码如下:Delphi TIdTCPClient.IOHandler.Write(TStream)无法发送Big5?,delphi,indy,indy10,delphi-10.3-rio,Delphi,Indy,Indy10,Delphi 10.3 Rio,通过TCPClient.IOHandler.WriteStmMsg;,消息被传送到前端。英语没问题,但Big5无法发送,为什么 TStringStream,程序已添加。。。TCPClient.IOHandler.DefStringEncoding:=IndyTextEncoding\u UTF8 代码如下: if not TCPClient.Connected then TCPClient.Connect; deviceToken := '6aa5bfcfe731ab29b260fab38a43
if not TCPClient.Connected then
TCPClient.Connect;
deviceToken :=
'6aa5bfcfe731ab29b260fab38a43f1e1abac0de3d6e8e0bc5f4b89c422938e8f';
MensajeEnviar := edtMensaje.Text;
strMessage := Get_Msg(deviceToken, Get_PayLoad(MensajeEnviar, 1,
'default'));
StmMsg := TStringStream.Create(strMessage);
StmMsg.Seek(0, soBeginning);
TCPClient.IOHandler.Write(StmMsg);
Big5不是一种语言。这是一种用于中文的字节编码 TIdIOHandler.DefStringEncoding属性仅适用于字符串操作,而不适用于流操作。TIdIOHandler.WriteTStream方法按原样写入流的内容。因此,您有责任确保流的内容事先正确编码 但是,您正在调用的TStringStream构造函数使用TEncoding.Default作为流的字节编码。在Windows1上,TEncoding.Default表示运行程序的用户的默认ANSI字符集。ANSI字符集不适用于中文文本,并且会丢失数据 1:在非Windows平台上,TEncoding。默认使用UTF-8 您需要使用TEncoding.UTF8代替流的字节编码,例如: stmsg:=TStringStream.CreatestrMessage,TEncoding.UTF8; 或者,您可以完全删除流,只需使用TIdIOHandler.WriteString方法,然后使用TIdIOHandler.DefStringEncoding属性,例如: TCPClient.IOHandler.writestressage;