EDOM Parse Error(在文本中找到无效字符)/朝鲜语字符问题

时间:2010-06-23 07:18:17

标签: xml delphi utf-8

我如何解决这个问题?

  Tdm = class(TDataModule)
  HTTP: TIdHTTP;
  XMLDoc: TXMLDocument;
  ...
  var sStory: String;
  ...
  sStory:= GetHTTP('http://localhost/MultiPlay_PHP/contentlesson.php');
  begin
  xmlDoc.XML.Text := sStory;
  xmlDoc.Active :=true;

  StartItemNode := XMLDoc.DocumentElement.ChildNodes.First;
  ANode := StartItemNode;

错误从xmlDoc.Active代码开始。

<?xml version="1.0" encoding="UTF-8" ?> 
- <WORDSET>
- <WORD NUMBER="1">
  <ENGLISH>beat</ENGLISH> 
  <KOREAN>두드리다</KOREAN> 
  </WORD>

Project.exe引发了异常类EDOMParseError,并显示消息'在文本内容中找到了无效字符。 但是当我从XML中删除韩文字符时,代码就可以了。

2 个答案:

答案 0 :(得分:2)

我看到你使用Indy的http组件。当你得到一个URL时,你必须提供一个流(你可能在你的GetHTTP方法中做)。当该流包含xml而不包含任何其他内容时,请使用LoadFromStream的{​​{1}}方法直接使用该流。 TXMLDocument将确定编码,因此它可以避免使用字符串和编码。

当然,为了这个工作,contentlesson.php必须返回正确的XML(由Robert Love评论)。如果您发布的那部分正是您从该页面获得的部分,那么当您收到错误时,这不是您的错。

答案 1 :(得分:1)

我怀疑您的网络服务器没有返回UTF-8编码的内容。您可以尝试通过将sStory: String的声明更改为sStory : UTF8string

来更改结果的编码

使用以下代码块我无法复制问题。

var
 sStory : Utf8String;
begin
 sStory := '<?xml version="1.0" encoding="UTF-8" ?>' +
           '<WORDSET>'  +
           '<WORD NUMBER="1">'  +
           '<ENGLISH>beat</ENGLISH>'  +
           '<KOREAN>두드리다</KOREAN>'  +
           '</WORD>'  +
           '</WORDSET>';
 xmlDoc.XML.Text := sStory;
 xmlDoc.Active := true;
end;