【问题标题】:EDOM Parse Error (invalid character was found in text)/ Korean characters ProblemEDOM Parse Error (invalid character was found in text)/韩文字符问题
【发布时间】:2010-06-23 07:18:16
【问题描述】:

我该如何解决这个问题?

  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 中删除韩语字符时,代码就可以了。

【问题讨论】:

  • 哪个 Delphi 版本?可能是 Ansistring / UnicodeString 问题
  • Delphi 2009,我想,因为我使用的是 CodeGear Delphi 2009。
  • 可能文本不是有效的 UTF-8。
  • 你的 GetHTTP 函数是什么样的?
  • 使用发布的 Xml 并删除“-”字符并添加缺少的 节点我没有收到任何错误。

标签: xml delphi utf-8


【解决方案1】:

我看到你使用 Indy 的 http 组件。当您获得一个 URL 时,您必须提供一个流(您可能在 GetHTTP 方法中这样做)。当该流包含 xml 而没有其他内容时,直接使用您的 TXMLDocument 的 LoadFromStream 方法使用该流。 TXMLDocument 将确定编码,因此它使您免于使用字符串和编码。

当然,要使这一切正常工作,contentlesson.php 必须返回正确的 XML(由 Robert Love 评论)。如果您发布的那部分正是您从该页面获得的内容,那么出现错误不是您的错。

【讨论】:

    【解决方案2】:

    我怀疑您的网络服务器没有返回 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;
    

    【讨论】:

    • 我将 GetHTTP 函数的返回类型更改为 Utf8String(以及 sstory 的类型),但仍然出现错误。不过还是谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多