时间:2018/6/12 11:56:41 点击:
核心提示:
先说一下场景:我方接受java传过来的webservice,里面的字符是utf8编码的,然后 某些汉字总是转换错误?比如 监护人2580,转换后就出现 监护人?580, 对方说 其他语言都没有问题。于是跟踪,还好写入文件的字节流,被utraedit识别为没有bom的utf8编码,可以显示,看来是我这...
先说一下场景:我方接受java传过来的webservice,里面的字符是utf8编码的,然后 某些汉字总是转换错误?
比如 监护人2580,转换后就出现 监护人?580, 对方说 其他语言都没有问题。于是跟踪,还好写入文件的字节流,被
utraedit识别为没有bom的utf8编码,可以显示,看来是我这边的问题。
我这边用了diocp 的 ContentAsString 接收字符串 ,最终调试用的是ByteBufferToString 转换成字符串处理
function ByteBufferToString(pvBuff:PByte; pvLen:Cardinal): string;
{$IFNDEF UNICODE}
lvRawStr:AnsiString;
l:Cardinal;
{$ELSE}
lvBytes:TBytes;
lvRawStr:AnsiString;
l:Cardinal;
{$ENDIF}
begin
{$IFDEF UNICODE}
SetLength(lvBytes, pvLen);
Move(pvBuff^, lvBytes[0], pvLen);
Result := TEncoding.Default.GetString(lvBytes);
{$ELSE}
l := pvLen;
SetLength(lvRawStr, l);
Move(pvBuff^, PansiChar(lvRawStr)^, l);
Result := lvRawStr;
{$ENDIF}
刚开始总以为是delphi的utf8decode写的有问题,然后用TEncoding,还是不行
跟踪 监护人的字节 :正确的是 E7 9B 91 E6 8A A4 E4 BA BA 32 35 38 30
但是我们的人,少了个BA,改为3F了?
E7 9B 91 E6 8A A4 E4 BA 3F 35 38 30
究竟是什么神手,可以改变,后来没有办法自己写了个函数一样的
function ByteBufferToAnsiString(pvBuff:PByte; pvLen:Cardinal): ansistring;
lvRawStr:AnsiString;
l:Cardinal;
begin
l := pvLen;
SetLength(lvRawStr, l);
Move(pvBuff^, PansiChar(lvRawStr)^, l);
Result := lvRawStr;
居然发现可以正确传输自己了。
哦,my god,原来是 我们的delphi的结果是string类型,不是ansistring类型,于是在编译器里面ansistring内部做了转换.
这个好像是为什么有些大神不用string的原因,如果string长度很大,那做转换岂不是要很多时间,所以建议delphi粉丝们,新版的delphi最好用tbytes这样的类型,老版d7党,可以用ansistring
・
【MyBean-开源框架】进行简单的逻辑插件(演示在控制台中应用)
・
自己写的一款手机电脑互传文件的小工具(文件传手),希望得到大家认可和指点
・
Delphi报表控件王者争夺:QuickReport VS FastReport
・
Project Anarchy 概要
・
关于2014年3月21日域名被劫持
・
如何让32位编译的程序在64位系统中正常运行
・
TBitmap支持Gif,成为具有jpg,gif,bmp,ico,gif五种显示功能的图片控件
・
盒子恭祝大家新年快乐,马年吉祥
・
TPicShow图片切换特效控件支持XE5
・
关于12月16日网站发生故障的说明
・
Delphi XE5 for Android 启动无黑屏等待总结
・
Android开发数据库三层应用-DataSnap
・
Delphi著名皮肤控件库大全
・
FastReport VCL v4.15支持RAD Studio XE5
・
使用UniDAC在Delphi XE4中开发iOS应用
06-12
・
关于delphi的utf8 字符串string转换问题
09-03
・
Delphi中多线程分析详解
09-28
・
关于Delphi XE2的FMX的一点点研究之消息篇
09-03
・
Delphi开发的免费的自动升级(更新)程序
09-06
・
解决 Delphi XE (2010,2009) 里的UTF8乱码问题!
09-03
・
Delphi会经常出现Access violations这样的内存访问错误
09-03
・
Delphi中JSon SuperObject类库使用
09-03
・
Delphi中多线程安全和并发问题
09-03
・
Delphi获取真正随机数的代码
09-03
・
Delphi线程池代码实例