和一厂家做对接,对方 提供一个web接口,对接过去之后,返回的字符串结果如下:
<Return code="返回代码" desc="描述信息"> --是widestring类型的这是对方返回回来的消息,我用XMLdocument 解析的时候,提示字符非法,我看了一下是汉字的问题,这个应该怎么处理。对方返回的时widestring,我最后想提取成string ,有什么好办法吗?
<Return code="返回代码" desc="描述信息"> --是widestring类型的这是对方返回回来的消息,我用XMLdocument 解析的时候,提示字符非法,我看了一下是汉字的问题,这个应该怎么处理。对方返回的时widestring,我最后想提取成string ,有什么好办法吗?
解决方案 »
- WSARecvFrom调用出错,返回10014,但我已经指定缓存地址了!
- 救命啊,在线等!!!
- 紧急求救:怎样在Chart / dbChart/ QRChart 中添加几条竖线? 如在x=2, x=80, x=100三处加竖线,急呀!
- 请问策划和营销有什么区别
- 怎么做公用的过程,例:怎样使几个FORM里的ADOQUERY公用一个DBNavigator,把这个DBNavigator放在Toolbar上
- 哪位高手知道什么是webservice接口??
- 怎样动态连接ACCESS数据库,也就是说不用配置ODBC或BDE或者怎样通过通过代码控制ODBC或BDE连接指定ACCESS数据库??
- 两个同样大小的动态数组如何相互付值?
- Delphi 时间的计算?如何实现随意加上一段时间呢?
- 请问大家有没有对第一次查询后的结果再进行第二次查询的办法?如果有,它的效率如何?愿出50分知道答案。
- delphi adoquery access 插入速度
- Clientdataset.filter的问题请救?
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<data version="1.0">
<Return code="001" desc="XML数据格式不正确!">
</Return>
</data>-------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data version="1.0">
<Return code="001" desc="XML姘娈鏍煎间告纭?>
</Return>
</data>-------------------------------------------------------------
<?xml version="1.0" encoding="GBK" standalone="yes"?>
<data version="1.0">
<Return code="001" desc="XML数据格式不正确!">
</Return>
</data>我更改了编码方式,读取厂家提供的信息,结果就是这样,大家看看有什么办法没?-------------------------------------------------提取节点值的代码如下:
If Not VarIsNull(Node.Attributes['code']) then
ReturnCode:=Node.Attributes['code'];
IF Not VarIsNull(Node.Attributes['desc']) then
ReturnStr:=Node.Attributes['desc']; 但是得到都得不到数据PS: ReturnCode,ReturnStr :string
我刚试了下没问题的
var
i:integer;
buffer:widestring;
ch,c1,c2:byte;
begin
result:='';
i:=1;
while i<=Length(utf8str) do
begin
ch:=byte(utf8str[i]);
setlength(buffer,length(buffer)+1);
if (ch and $80)=0 then //1-byte
buffer[length(buffer)]:=widechar(ch)
else begin
if (ch AND $E0) = $C0 then
begin // 2-byte
inc(i);
c1 := byte(utf8str[i]);
buffer[length(buffer)]:=widechar((word(ch AND $1F) SHL 6) OR (c1 AND $3F));
end
else
begin // 3-byte
inc(i);
c1 := byte(utf8str[i]);
inc(i);
c2 := byte(utf8str[i]);
buffer[length(buffer)]:=widechar((word(ch AND $0F) SHL 12) OR (word(c1 AND $3F) SHL 6) OR (c2 AND $3F));
end;
end;
inc(i);
end; //while
i := WideCharToMultiByte(codePage,WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,@buffer[1], -1, nil, 0, nil, nil);
if i>1 then
begin
SetLength(Result, i-1);
WideCharToMultiByte(codePage,WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,@buffer[1], -1, @Result[1], i-1, nil, nil);
end;
end;
delphi用的什么版本的?
不是GB2312这种编码?