一、乱码问题分析
book.xml
<?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名 name="xxx">Java就业培训</书名> <作者>张老师</作者> <售价>56</售价> </书> <书> <书名>JavaScript</书名> <作者>小四</作者> <售价>69</售价> </书> </书架>
保存到XML文件中,出现乱码:
XMLWriter writer=new XMLWriter(new FileWriter("src/book.xml")); //FileWriter 查看的本地的编码格式 writer.write(document); writer.close();
出现乱码原因:
document对象在内存中是以"UTF-8"编码形式存在,用FileWriter将document对象以字符流的形式写入xml文档默认是用本地码表"gb2312"编码,所以,编码不一样出现乱码问题。
解决方案一:
包装流OutputStreamWriter并给定写入文件时所使用的编码表
XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"UTF-8")); writer.write(document); writer.close();
解决方案二:
OutputFormat的setEncoding方法指定传
OutputFormat format=OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8");//和文档一致 XMLWriter writer=new XMLWriter(new FileOutputStream("src/book.xml"),format); writer.write(document); writer.close();
乱码问题总结:
- 用字符流向文件写入数据默认使用本地码表即"gb2312",所以如果文件的编码为"UTF-8",此时应该注意转码,否则将会出现乱码。
- 任何对象读入内存都是以"UTF-8"编码的形式存在, 默认情况下XMLWriter的write方法是以"UTF-8"的编码形式将内存中的document对象传给文件,所以如果是字节流文件,就不需要考虑乱码。
总之,用字符流向文件写入数据要考虑乱码问题,而用字节流就不必考虑乱码问题
时间: 2024-11-06 03:37:28