和一厂家做对接,对方 提供一个web接口,对接过去之后,返回的字符串结果如下:
<Return code="返回代码" desc="描述信息">     --是widestring类型的这是对方返回回来的消息,我用XMLdocument 解析的时候,提示字符非法,我看了一下是汉字的问题,这个应该怎么处理。对方返回的时widestring,我最后想提取成string ,有什么好办法吗?

解决方案 »

  1.   

    厂家没有说XML的编码是什么吗
      

  2.   

    -------------------------------------------------------------
    <?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
      

  3.   

    你的Node是怎么赋值的。
    我刚试了下没问题的
      

  4.   

    delphi2005没用过好像是utf8的widechar,如果是delphi7之类的版本,给你个转编码的例子function UTF8ToAnsiString(utf8str:string; CodePage: integer):AnsiString;
    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;
      

  5.   

    把获取返回结果的那段代码贴出来,是你编码格式出问题了,我也遇见过,
    delphi用的什么版本的?
      

  6.   

    是不是对方给你的时候<?xml version="1.0" encoding="GB2312" standalone="yes"?>
    不是GB2312这种编码?