0

我的代码昨天运行良好,但我今天再次启动它并收到错误

org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: not well-formed (invalid token)

有问题的 xml 没有任何时髦的字符。它存储在一个名为“xml”的字符串变量中。公平地说,我不太确定如何处理这个问题,只是在学习一些教程,但这是我的尝试。

out = new PrintWriter(mySocket.getOutputStream(), true);
BufferedReader br = new BufferedReader(new InputStreamReader(mySocket.getInputStream(), "US-ASCII"));
InputStream is = mySocket.getInputStream();

...
String xml = the stuff that was read in with br.read();
...

SAXParserFactory saxPF = SAXParserFactory.newInstance();
SAXParser saxP = saxPF.newSAXParser();
XMLReader xmlR = saxP.getXMLReader();

DataHandler myDataHandler = new DataHandler();
xmlR.setContentHandler(myDataHandler);
xmlR.parse(new InputSource(new StringReader(xml)));
myData = myDataHandler.getData();

我哪里做错了?

更新:xml以

<?xml version="1.0" standalone="yes"?> 

所以看起来“第 1 行,第 0 列”实际上没有任何问题。

更新 2:我发现 is.available() 正在返回 0.... 我该如何修复?

4

2 回答 2

0

您需要确保指定您的编码方法。尝试:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

您始终需要定义如何对数据进行编码,否则您将遇到问题。您可能还想更改此设置:

BufferedReader br = new BufferedReader(new InputStreamReader(mySocket.getInputStream(), "US-ASCII"));

对此:

BufferedReader br = new BufferedReader(new InputStreamReader(mySocket.getInputStream(), "utf-8"));

这是一篇很棒的文章,讨论了指定如何编码数据的重要性:

http://www.joelonsoftware.com/articles/Unicode.html

希望这可以帮助!

于 2012-07-10T15:04:23.543 回答
0

我不确定到底是什么问题,但我改变了几件事并让它有点工作。这是我更改的内容:

我变了

BufferedReader br = new BufferedReader(new InputStreamReader(mySocket.getInputStream(), "US-ASCII"));
InputStream is = mySocket.getInputStream();

BufferedInputStream in = new BufferedInputStream(mySocket.getInputStream());

而且我没有在原始问题中包含这个(它是“...”的一部分),但我摆脱了这个条件

if(in.available()>0)

因为它返回 0 即使 read() 工作只是 find 没有它。不过,这可能只是一个临时的黑客攻击,我需要弄清楚为什么它返回 0 并找到一个合法的修复......

于 2012-07-13T15:24:28.050 回答