Track.getSimilar:在元素中发现无效的XML字符(Unicode:0x3)...

4

我使用last.fm API:Api Last.fm

我有一组包含歌曲(曲目)及其艺术家的列表,并且我想为每首歌曲恢复类似的歌曲。方法Track.getSimilar(Artist, track, key)运行得非常完美。但是,当艺术家或曲目为阿拉伯语时,我会收到以下异常:

    [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)

我该如何解决这个问题呢?谢谢您提前帮助。
2个回答

8
Unicode代码点0x3是一个控制字符。它不是任何脚本或语言系统中的正常字符,因此它的存在显然是一个错误,可能是在数据库本身中出现的错误。这可能是由于编码转换失败、字符转字节转换或数据库写入损坏造成的。
XML不能包含控制字符,甚至不能作为实体引用存在。因此,您的XML格式不正确,无法使用XML工具进行处理。您需要使用字符串处理或类似方法删除该错误字符。
同时,您可以检查所有其他非法的XML字符。XML不允许使用Unicode代理块[0xD800 - 0xDFFF]、非字符0xFFFE0xFFFF0x20以下的字符(=控制字符),除了0x9[tab]、0xA[LF]和0xD[CR]。这在这里正式说明:http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char

请注意,一些文本编辑器中会显示控制字符(例如,在Textmate中,0x03显示为“^C”)。您可以尝试将有疑问的文本复制/粘贴到其他编辑器中以查找奇怪的字符!或者,通过使用正则表达式也可以追踪这些字符。 - rinogo

1

0x3是ASCII控制字符 ETX,但一些旧程序可能将其用作回车符或其他内容,因此您可以通过将来自此类源的内容粘贴到文本字段中来获得此内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接