Ошибка синтаксического анализа EDOM (недопустимый символ в тексте) / корейские символы Проблема - PullRequest
3 голосов
/ 23 июня 2010

Как я могу это исправить?

  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 ]

2 голосов
/ 23 июня 2010

Я вижу, вы используете http-компонент Indy. Когда вы получаете URL, вы должны предоставить поток (что вы, вероятно, делаете в вашем методе GetHTTP). Когда этот поток содержит xml и ничего больше, используйте поток напрямую с методом LoadFromStream вашего TXMLDocument. TXMLDocument определит кодировку, поэтому он избавит вас от дурачения со строками и кодировками.

Конечно, чтобы все это работало, contentlesson.php должен возвращать правильный XML (как прокомментировал Роберт Лав). Если та часть, которую вы разместили, является именно той, которую вы получили с этой страницы, то вы не виноваты, когда получаете ошибки.

1 голос
/ 23 июня 2010

Я подозреваю, что ваш веб-сервер не возвращает содержимое в кодировке 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...