【Android】JSONでの情報取得時での変換失敗

OS Android2.3.3

WEBからJSONフォーマットのデータを取得して、
JSONにてデータを扱おうとした時に引っかかったのでメモ。

[WEBサーバー側]
PHPにて出力内容を記述する。

            • 省略(DBに接続して、値を取得するコード)-------

$json = array();

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC)) {
$row[0] = mb_convert_encoding($row[0], "UTF-8", "SJIS");
$row[1] = mb_convert_encoding($row[1], "UTF-8", "SJIS");
$row[2] = mb_convert_encoding($row[2], "UTF-8", "SJIS");

$json['ID'] = urlencode($row[0]);
$json['Name'] = urlencode($row[1]);
$json['kana'] = urlencode($row[2]);
$data[] = $json;
}

print(urldecode(json_encode($data)));

            • 省略(後始末)-------------------------

[Android側]
http://www.vogella.de/articles/AndroidJSON/article.html
このサイトを参考にソースコードを書く。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String readTwitterFeed = readTwitterFeed();
try {
JSONArray jsonArray = new JSONArray(readTwitterFeed);
Log.i(ParseJSON.class.getName(),
"Number of entries " + jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Log.i(ParseJSON.class.getName(), jsonObject.getString("text"));
}
} catch (Exception e) {
e.printStackTrace();
}
}

JSONArray jsonArray = new JSONArray(readTwitterFeed);
ここの部分でつまづく。
変換に失敗してしまう。

失敗した文字列をコピーして、
http://jsonlint.com/
にて実行するとエラー表示。
どうやら、先頭の文字に問題がありそうだけど、
見た目は特に問題ない。
ためしに、先頭の文字"["を削除して、
改めて"["を打ち直すと問題なくJSON形式だと判断してくれる。
結局、出力された文字列を
http://members.jcom.home.ne.jp/toya.hiroshi/str_to_dump.html
にて調べてみると、
「FEFF」が先頭に出力されてる・・・。
これは通常の文字ではなくて、
BOM(http://e-words.jp/w/BOM.html)に関する文字列。
これが原因であれば、
readTwitterFeed = readTwitterFeed.replace("\uFEFF", ""); //BOM を取り外す

これを追加してあげて、JSONArrayを呼び出してあげればいい。

理由がわかるまで、
なかなか骨が折れた。