Track.getSimilar: в элементе обнаружен недопустимый символ XML (Unicode: 0x3)…

Я использую API last.fm: Api Last.fm

У меня есть список песен (треков) с их исполнителями, и я хочу восстановить каждую песню, как его песня. метод Track.getSimilar (Исполнитель, трек, ключ) работает отлично. НО, когда исполнитель или трек на арабском языке, возникает следующее исключение:

    [Fatal Error] :2583:13: An invalid XML character (Unicode: 0x3) was found in the element content of the document.
Exception in thread "main" de.umass.lastfm.CallException: org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x3) was found in the element content of the document.
at de.umass.lastfm.Caller.call(Caller.java:268)
at de.umass.lastfm.Caller.call(Caller.java:189)
at de.umass.lastfm.Track.getSimilar(Track.java:369)

Как я могу решить эту проблему?

заранее спасибо


person FRIDI Mourad    schedule 09.04.2014    source источник


Ответы (2)


Кодовая точка Unicode 0x3 - это управляющий символ. Это необычный символ в каких-либо сценариях или языковых системах, поэтому его присутствие явно является ошибкой, возможно, в самой базе данных. Это могло быть результатом неудачного преобразования кодировки, преобразования символов в байты или повреждения записи в базе данных.

XML не может содержать управляющие символы - даже в виде ссылок на сущности. Следовательно, ваш XML сформирован неправильно и не может быть обработан с помощью инструментов XML. Вместо этого вам нужно удалить этот ошибочный символ с помощью обработки строк или аналогичного метода.

В то же время вы можете проверить все другие символы, недопустимые в XML. XML не допускает никаких символов из суррогатных блоков Юникода [0xD800 - 0xDFFF], несимволов 0xFFFE и 0xFFFF или символов ниже 0x20 (= ​​управляющие символы) exec 0x9 [tab], 0xA [LF] и 0xD [CR] . Это официально указано здесь: http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char

person jasso    schedule 10.04.2014
comment
Обратите внимание, что управляющие символы отображаются в некоторых текстовых редакторах (например, 0x03 отображается как ^C в Textmate. Вы можете попробовать скопировать / вставить свой сомнительный текст, чтобы визуально найти забавные символы! Или регулярное выражение также всегда может отслеживать эти символы. - person rinogo; 08.09.2017

0x3 - это управляющий код ASCII ETX, но некоторые старые программы могут использовать это как возврат каретки или что-то в этом роде, поэтому вы можете получить это, вставив что-то из такого источника в текстовое поле.

person Noumenon    schedule 28.10.2016