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)

read() が機能していても 0 を返していたため、それなしで検索するだけです。ただし、これはおそらく一時的なハッキングにすぎないため、なぜ 0 が返されるのかを突き止め、正当な修正を見つける必要があります...

于 2012-07-13T15:24:28.050 に答える