java接口调用,编码转换问题

夏夜倒骑驴 2018-07-23 01:12:54
版本Delphi XE10
原文中有两个汉字时("number":96,"name":"鑲ョ殏","level_name":"涓ョ")转换正确为("number":96,"name":"肥皂","level_name":"严管")

原文中出现三个汉字时("number":99,"id":14,"price":38.5,"name":"娲楀彂姘?,"level_name":"涓ョ")转换就失败("number":99,"id":14,"price":38.5,"name":"洗发 ?,"level_name":"严管")

用Delphi2007 调用,都正确

我也知道 D2007(GKB) 和 XE(unicode) 内核不同, 就是不知道,问题问题怎么解决
...全文
301 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏夜倒骑驴 2018-07-28
  • 打赏
  • 举报
回复
看到这篇文章想到的灵感,虽然这篇文章不是我要的答案,但是他给的启发
https://blog.csdn.net/y281252548/article/details/52942622
感谢
我没有贴出源码,所以问题问的也不对,所以向看到过的同行表示歉意。分数就给唯一回复的这位了
夏夜倒骑驴 2018-07-28
  • 打赏
  • 举报
回复
问题已解决,参数变量初始化问题,如下
有问题代码:
var
ResponseStream : TStringStream;
ResponseStream := TStringStream.Create(''); //问题就是这里
IdHTTP1.Get(url,ResponseStream);
result := UTF8Decode(ResponseStream.DataString); //需要解码,解码错误就是问题描述现象

正确代码
var
ResponseStream : TStringStream;
ResponseStream := TStringStream.Create('',TEncoding.UTF8); //增加参数,问题解决
IdHTTP1.Get(url,ResponseStream);
result := ResponseStream.DataString; //不需要解码,直接就是正确的明文
看那山瞧那水 2018-07-27
  • 打赏
  • 举报
回复
"用Delphi2007 调用,都正确",说明传过来的编码是ANSISTRING(D2007默认是ANSISTRING)。用XE10,就把传过来的转换成UNICODE

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧