PHP解析Delphi 窗体文件

          最近在做Delphi 转C#的工作:需要把原来用Delphi写的程序转到C#上。由是想到自己写个程序来转转。

          但是Delphi窗体里汉字使用的是#NNNNN格式的Unicode编码,图片存储的是(XXXXXXX)格式的内容。

         上网参照一个“UniCode2Chinese”的函数在Delphi里能实现转换。通过分析这个函数结合PHP代码进行测试发现在最后一步WideCharToString转换前PHP和Delphi的处理结果都是类似的(Delphi里前后两个ASCII进行了颠倒)。然后查看Delphi手册:WideCharToString converts the given null-terminated Unicode string to a string made up of single- or multi-byte characters.。然后想到可能是文字的编码不对,经过测试发现,原来Delphi里的Unicode使用是utf-16的编码。最终PHP的代码如下:

mb_convert_encoding(hex2bin(dechex("35775")), 'gbk', 'utf-16')  其中35775为DFM文件中以#号开头的5个数字,表示的一个汉字。

           DFM中的图片起初怀疑它是base64编码经测试不对。又怀疑它是16进制的编码,但只使用hex2bin转完后写到文件里并不能显示图片。经过比对转完后的内容和原始图片发现转后的内容多了一些数据---多了图片的格式信息,即Delphi控件属性中Picture属性栏里显示的内容。可惜一直没有找到分割的完美办法,因为多出的内容和文件类型有关,开始测试了几个发现都以0000结束但后来发现也有以0100结束的。所以便没继续研究。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值