添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
酷酷的日光灯  ·  [vlc-devel] [PATCH] ...·  1 月前    · 
朝气蓬勃的饼干  ·  法释[2013]22号 ...·  1 月前    · 
逆袭的剪刀  ·  IntelliJ IDE ...·  4 月前    · 

时间: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线程池代码实例
  •