読者です 読者をやめる 読者になる 読者になる

XmlPullParserException: PI must not start with xml .. でパースできない(BOM付きxmlの扱い)

utf-8xml、bom付きのファイルを解析する必要があったが、
そのままPullParserに入れると落ちてしまった。

ファイルそのものの保存形式を変えたいと真っ先に思ったが、
諸々の都合でそれは出来ず…

調べると、やはりbomを何とかしないといけないようで、
HttpGetで取得したbyte array(下記の変数result)の値を、

String xmlStr = "";

if(result[0] == (byte)0xEF && result[1] == (byte)0xBB && result[2] == (byte)0xBF){

 //UTF-8 BOM付きであれば頭削除

 xmlStr = new String(result, 3, result.length - 3 , "UTF-8");

}else{

 xmlStr =  new String(result, "UTF-8");

}

というように、頭にbomがあればトリムして文字列化した物を
PullParserに渡すようにしたら、無事エラーは起きなくなった。

参考:http://www.geekality.net/2011/05/23/java-how-to-deal-with-the-bom-in-a-unicode-inputstream/