以前,我们习惯用以下方式在XML中保存中文:
try {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK"); // 指定XML编码
XMLWriter writer = new XMLWriter(new FileWriter("c:\\1.xml"),format);
Document document = DocumentHelper.createDocument();
Element root = document.addElement("users");
for(String user:userMap.keySet()){
Element userElm=root.addElement("user");
userElm.addElement("name").addText(user);
userElm.addElement("pswd").addText(userMap.get(user));
}
writer.write(document);
writer.close();
} catch (Exception e) {
System.out.println("无法将注册用户信息存储到文件中,原因为"+e.getMessage());
e.printStackTrace();
}
在中文操作系统下,这样的方案是可行的,但是在英文操作系统下中文就会变成问号。最好使用如下的修正方案:
try {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c:\\1.xml"),"UTF-8");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8"); // 指定XML编码
XMLWriter writer = new XMLWriter(osw,format);
Document document = DocumentHelper.createDocument();
Element root = document.addElement("users");
for(String user:userMap.keySet()){
Element userElm=root.addElement("user");
userElm.addElement("name").addText(user);
userElm.addElement("pswd").addText(userMap.get(user));
}
writer.write(document);
writer.close();
} catch (Exception e) {
System.out.println("无法将注册用户信息存储到文件中,原因为"+e.getMessage());
e.printStackTrace();
}
两端代码的变化区域在粗体部分,请注意区分。