JSON ファイルのデータに問題があります。Google の次のリンクを使用しています。
http://www.google.com/finance/company_news?q=AAPL&output=json"
私の問題は、データを解析して画面に表示したいときに発生します。何らかの理由でデータが正しくデコードされていません。
生データ:
1.) one which must have set many of the company\x26#39;s board on the edge of their
2.) Making Less Money From Next \x3cb\x3e...\x3c/b\x3e
データを取り込むときは、次のことを行います。
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "n");
}
is.close();
json = sb.toString();
org.json を使用して json ファイルからデータを抽出すると、次のような出力が得られます (バックスラッシュがないことに注意してください)。
1.)one which must have set many of the companyx26#39;s board on the edge of their
2.)Making Less Money From Next x3cbx3e...x3c/bx3e
これによって最初の問題を処理するための私の現在の方法:
JSONRowData.setJTitle((Html.fromHtml((article.getString(TAG_TITLE).replaceAll("x26", "&")))).toString());
2番目のものは私を逃れます(しゃれは意図されていません)
これが機能しない理由は、バックラッシュがエスケープ文字に使用されているためだと思います。データを読み込むさまざまな方法を試しましたが、うまくいきませんでした。正規表現を使用せずにこの問題を処理するためにデータをインポートする方法はありますか?
解決
今日の宿敵: "\x26" -- ASCII (16 進表記)
Raw データを Char 配列に読み取ります。apache の commons.io ライブラリは、これを行うのに最適な方法です。これを行ったら、for ループで char 配列を読み取り、"\" を探します。ヒットした場合は、次の配列位置で "x" を探します。再びヒットした場合は、char 配列の次の 2 文字を取得します。これらの 2 つの文字は、ASCII 16 進値です。16 進数を 10 進数形式に変換してから、10 進数を char にキャストします。この文字を取得して、文字列ビルダーに追加します。
("\" で) 一致するものがない場合は、その文字を文字列ビルダーに追加します。.toString()
メソッドを呼び出して文字列に変換できるようになりました。
そこから、データにはいくつかの HTML の残骸 (' および/またはこの場合)。Html.fromHtml() の使用 これを処理しました。