以前,我們習慣用以下方式在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();
}
兩端代碼的變化區域在粗體部分,請注意區分。