delphi2009(10,xe)下indy10发送utf8字符串
最近实现一个功能,使用delphi2009以TCP调用Java端的接口,接口要求先发送字符串的长度,然后再发送字符串内容,并且字符串要求是utf8格式的
调试了好长时间,才终于发现解决办法,或者说发现问题所在
我用了utf8encode方法,然后调用一个函数,在这个函数中将字符串转换为tidbytes后发送(前面的数据是结构体),这个函数的参数类型是string类型的,结果总是不成功
后来注意到utf8encode的返回值是RawbyteString类型的,作为string参数传递时被转换回去了
于是把utf8的转换放到里面,然后就正确了,代码如下
- function SendCmd(sCmd: string): boolean;
- var
- r: ARecord; //自定义的结构体
- I: Integer;
- sUtf8Cmd: RawbyteString;
- data: TIdBytes;
- begin
- sUtf8Cmd := UTF8Encode(sCmd);
- GetRecordData(@r, Length(sUtf8Cmd)); //自定义函数:初始化结构体
- data := RawToBytes(r, SizeOf(r));
- SetLength(data, SizeOf(r) + Length(sUtf8Cmd));
- for I := 1 to Length(sUtf8Cmd) do
- data[SizeOf(r) + I - 1] := Ord(sUtf8Cmd[I]);
- TcpClient.IOHandler.Write(data);
- Result := True;
- end;
- //indy中的函数,有些版本没有
- procedure BytesToRaw(const AValue: TIdBytes; var VBuffer; const ASize: Integer);
- begin
- Assert(Length(AValue) >= ASize);
- Move(AValue[0], VBuffer, ASize);
- end;
http://blog.csdn.net/youthon/article/details/8740199
delphi2009(10,xe)下indy10发送utf8字符串的更多相关文章
- 在Linux下使用iconv转换字符串编码
在Linux下写C程序,尤其是网络通信程序时经常遇到编码转换的问题,这里要用到iconv函数库. iconv函数库有以下三个函数 123456 #include <iconv.h>icon ...
- ubuntu下file_get_contents返回空字符串
ubuntu下file_get_contents返回空字符串 | 浏览:302 | 更新:2014-03-30 10:11 本文起初面临的问题是PHP中SoapClient不好使,最后file_get ...
- UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理
一.字符编码简介 1. ASCII码 在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(by ...
- 2.10 select下拉框
2.10 select下拉框 本篇以百度设置下拉选项框为案例,详细介绍select下拉框相关的操作方法. 一.认识select 1.打开百度-设置-搜索设置界面,如下图所示 2.箭头所指位置,就 ...
- UTF8字符串转换为汉字 c#
using System; /// <summary> /// UTF8字符串转换为汉字用的类 /// 转换如"\\u8d35"之类的字符串为对应的汉字 /// < ...
- 【转】UTF8字符串转换为汉字 c#,转自游戏开发主席
using System; /// <summary> /// UTF8字符串转换为汉字用的类 /// 转换如"\\u8d35"之类的字符串为对应的汉字 /// < ...
- TCP调试助手,十六进制发送或者字符串形式发送的理解
"无论创作还是欣赏,都是对法则和规律的逃逸,自由是艺术的源泉"-- 黑格尔 TCP调试助手中,在发送时可以选择十六进制发送或者字符串形式发送! 其实,两者最终调用的都是系统的soc ...
- Windows下通过socket进行字符串和文件传输
今天在windows平台下,通过socket实现了简单的文件传输.通过实现这一功能,了解基本的windows网络编程和相关函数的使用方法. 在windows平台上进行网络编程,首先都需要调用函数WSA ...
- 如何解决Windows 10系统下设备的声音问题
如何解决Windows 10系统下设备的声音问题? 请阅读下面的说明来解决Windows 10设备上的声音问题. 1. 检查设备管理器 打开开始菜单,键入设备管理器, 从出现的结果中选择并打开它. 在 ...
随机推荐
- <Linux> Linux下一些常用命令(个人记录)
mount -o loop XXXX XXX ./XXX & 后台运行 rm -rf XXX 删除文件夹 rm -rf * 删除当前目录下的所有文件 包括文件夹 ps -ef | g ...
- Android 使用Canvas在图片上绘制文字
一个小应用,在图片上绘制文字,以下是绘制文字的方法,并且能够实现自动换行,字体自动适配屏幕大小 private void drawNewBitmap(ImageView imageView, Stri ...
- 【codeforces 750B】New Year and North Pole
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- js进阶 9-7 自动计算商品价值
js进阶 9-7 自动计算商品价值 一.总结 一句话总结: 1.form表单控件value属性:属性可取值可赋值 2.文本onchange事件 3.form及form中控件通过name访问元素 二. ...
- html5--6-33 CSS定位是什么
html5--6-33 CSS定位是什么 一.总结 一句话总结: 1.常规文档流是一套体系,浮动是另外一套体系. 2.标签清除浮动之后会跑到常规文档流它本来的地方. 3.浮动是否占据常规文档流:应该不 ...
- C#基础readonly 与const
readonly 与 const readonly是运行时常量,const是编译期常量(在编译过程中已经把使用该值的都用值替代,不分配内存)readonly灵活性高,const效率高 readonly ...
- jQuery+ localStorage 实现一个简易的计时器
原型 图片发自简书App 需求1.关闭浏览器时时间继续运行2.刷新时保持当前状态3.结束时间保存在客户端 <div class="wrapper"> <div c ...
- 属性动画Property Animation
ViewPropertyAnimation 使用方式:View.animate() 后跟 translationX() 等方法,动画会自动执行. 注意translationX实现是调用对应的set方法 ...
- 【24.58%】【BZOJ 1001】狼抓兔子
Time Limit: 15 Sec Memory Limit: 162 MB Submit: 19227 Solved: 4726 [Submit][Status][Discuss] Descrip ...
- 面试问题:Vista与XP的Session 0与Session X的区别
面试问题:Vista与XP的Session 0与Session X的区别 在XXXXX的一次面试中,笔试问题的题目曾提到Session 0.Session 1在Vista和Xp中的区别?现在把答案发上 ...