delphi7下 按UTF-8编码将字符串转换成byte数组
求助:delphi7下 按UTF-8编码将字符串转换成byte数组
在发送消息时需将字符串指令按UTF-8编码将字符串转换成byte数组,在该byte数组前附加两个字节(big endian)描述后续字节数。
我和别的公司做TCP对接 我这边是客户端
他文档中有上面一句话
我的理解是 先将 string 转换成 UTF8String 在将 UTF8String 赋值给 byte数组
但是信息是错误的 是不是我理解错误了
我的代码如下
------解决方案--------------------
理解应该没问题
服务端单位有没有提供DEMO或技术支持,这个最好问一下
附加的两个字节描述符有没有问题?
------解决方案--------------------
问下服务器开发公司不就知道了,省得自己瞎猜,费时又费力!若真不是这样,那岂不是浪费时间?
------解决方案--------------------
按你的代码 info[1] 直接等于count不就行了?
而且这句好像不对吧
Move(temp1[1], info[2], count);
count是ansi字符串的长度而utf8英文数字1字节,其他特殊字符包括汉字等占2~4不等,那么你这种赋值方法肯定会有隐患
而且以前版本的delphi UTF8Encode函数有bug对于单字节中英文混排的转换会出现乱码
------解决方案--------------------
更正是单字赋汉字和中英文混排
------解决方案--------------------
叫服务端提供DEMO不就好了,提供这种服务连接的都会有DEMO
在发送消息时需将字符串指令按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