我用.net(c#)写了个webservice,想用delphi调用,但是出现了错误;
错误如下:Project PrjQueue.exe raised exception class EdomparseError with message'无效的unicode字符' Line 1 :<?xml version="1.0" encode="utf-8"?><s',...>
那位大侠知道怎么回事?谢了
错误如下:Project PrjQueue.exe raised exception class EdomparseError with message'无效的unicode字符' Line 1 :<?xml version="1.0" encode="utf-8"?><s',...>
那位大侠知道怎么回事?谢了
但是现在又有一个问题:delphi共有2个函数调用webservice,其中一个返回汉字,但是返回得到的却是一些编码,怎么才能转换成汉字呢(delphi中)?
function UTF8Encode(const WS: WideString): UTF8String;参看以下程序 。看一下你得到的是什么形式,XML用utf8编码。所以的转化一下
var
AStr: string;
AWideStr: WideString;
begin
ADOQuery1.Open;
ADOQuery1.SaveToFile('F:\xml_Test\Temp\Share.xml', pfXML);
ADOQuery1.Close;
XMLDocument1.LoadFromFile('F:\xml_Test\Temp\Share.xml');
XMLDocument1.Active := True;
Memo1.Text := XMLDocument1.XML.Text;
AWideStr :=UTF8Decode( XMLDocument1.XML.Text);
Memo2.Text := AWideStr;
XMLDocument1.Active := False;
XMLDocument1.XML.Text := UTF8Encode(AWideStr);
Memo3.Text := XMLDocument1.XML.Text;
XMLDocument1.Active := True;
XMLDocument1.SaveToFile('F:\xml_Test\Temp\Shard.xml');
XMLDocument1.Active := False;
在"UTF-16"编码方式中,所有的字符都使用16个二进制位来表示,表示的从0到65535的字符。在处理使用该编码的文件时,每取出一个字符,需要从该文件中得到两字节的数据,按照其默认的高低为顺序,将其组合为一个16位的数值,即为该字符的数值。
"UTF-8"编码方式中,表示字符编码的基本单位是一个八位二进制数(一字节)。根据字符在Unicode字符集中的位置,即字符的数值不同,一个字符可能被编码成为一字节,两字节,三字节。具体规定如下:
从0x0000到0x007f之间的字符(即ASCII码的前128位),使用一字节编码。具体格式为 [0vvvvvvv],该字节的第一位为0,后七位为有效位,表示该字符的数值,这与ASCII码的编码方式相同,无需特殊处理。
从0x0080到0x07ff之间的字符使用两个字节编码。具体格式为[110vvvvv], [10vvvvvv],第一个字节的开始三位为110,其后为有效位,第二个字节的开始两位为10,有六个有效位。处理时需要将此两个字节的有效位取出,合成一个十一位的二进制数,即为该字符的数值。
从0x0800到0xffff之间的字符使用三个字节编码,具体格式为 [1110vvvv], [10vvvvvv], [10vvvvvv]。 此三个字节的有效位分别为4,6,6,处理时应把他们合并成16位的数值。
现在的问题越来越怪,我的机器的操作系统是xp的,另一台为2000的;如果用delphi调用我的机器上的webservice那么会出现错误(如标题);
在2000操作系统上的机器再布署webservice,用delphi调用它就可以,也不报错;是不是我机器的操作系统设置有什么不对.