首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi7下 按UTF-8编码将字符串转换成byte数组

2012-03-31 
求助:delphi7下 按UTF-8编码将字符串转换成byte数组在发送消息时需将字符串指令按UTF-8编码将字符串转换成

求助:delphi7下 按UTF-8编码将字符串转换成byte数组
在发送消息时需将字符串指令按UTF-8编码将字符串转换成byte数组,在该byte数组前附加两个字节(big endian)描述后续字节数。


我和别的公司做TCP对接 我这边是客户端  
他文档中有上面一句话  

我的理解是 先将 string 转换成 UTF8String 在将 UTF8String 赋值给 byte数组  

但是信息是错误的 是不是我理解错误了  

我的代码如下 

Delphi(Pascal) code
var LoginInfo: string;  temp1: UTF8String;  retuInfo, count: Integer;  pass: MD5Digest;  info: array of Byte;  readarr: array[0..254] of Byte;begin//DlSocketProxy.connectServer;  try    pass := MD5String(serverPWD);    temp1 := MD5Print(pass);    //要发送的字符串       LoginInfo := '1,' + serverID + ',' + FormatDateTime('yyyymmddhhmmss', Now) + ',' + temp1;    count := Length(LoginInfo);    //转化成 UTF8String    temp1 := UTF8Encode(LoginInfo);    SetLength(info, count + 2);    //转化成byte数组    Move(temp1[1], info[2], count);    retuInfo := Length(info);    //添加描述字符    第一个字节为0   第二个字节为 数据原始长度    info[0] := 0;    info[1] := retuInfo - 2;   except  end;end;


[解决办法]
理解应该没问题
服务端单位有没有提供DEMO或技术支持,这个最好问一下
附加的两个字节描述符有没有问题?
[解决办法]
问下服务器开发公司不就知道了,省得自己瞎猜,费时又费力!若真不是这样,那岂不是浪费时间?
[解决办法]
按你的代码 info[1] 直接等于count不就行了?
而且这句好像不对吧
Move(temp1[1], info[2], count);
count是ansi字符串的长度而utf8英文数字1字节,其他特殊字符包括汉字等占2~4不等,那么你这种赋值方法肯定会有隐患
而且以前版本的delphi UTF8Encode函数有bug对于单字节中英文混排的转换会出现乱码


[解决办法]
更正是单字赋汉字和中英文混排
[解决办法]
叫服务端提供DEMO不就好了,提供这种服务连接的都会有DEMO

热点排行