最近在使用FusionCharts做报表图形的时候、数据是生成的UTF-8格式的xml文件、但是生成后总是没有BOM头信息的、这样的xml当里面含有中文字符的时候、FusionCharts不能正常解析、报数据格式错误、手动加入BOM头信息的方法:
public String createXML(String xml, HttpServletRequest request, String bcode)
throws FileNotFoundException {
BufferedWriter bw = null;
OutputStreamWriter osw = null;
String path = request.getSession().getServletContext().getRealPath("/")
+ "\\html\\portlet\\ext\\datacenter\\data\\" + bcode + ".xml";
File file = new File(path);
FileOutputStream fos = new FileOutputStream(file, false);
try {
// write UTF8 BOM mark if file is empty
if (file.length() < 1) {
final byte[] bom = new byte[] { (byte) 0xEF, (byte) 0xBB,
(byte) 0xBF };
fos.write(bom);
}
osw = new OutputStreamWriter(fos, "UTF-8");
bw = new BufferedWriter(osw);
if (xml != null)
bw.write(xml);
} catch (IOException ex) {
try {
throw ex;
} catch (IOException e) {
e.printStackTrace();
}
} finally {
try {
bw.close();
fos.close();
} catch (Exception ex) {
}
}
return "/html/portlet/ext/datacenter/data/" + bcode + ".xml";
}
另外:在websphere环境下、获取绝对路径与Tomcat有点差异、
String path = request.getSession().getServletContext().getRealPath("/")+"\\html\\portlet\\ext\\datacenter\\data\\" + bcode + ".xml";
WAS环境需要在html前再加一个斜杠