1、文件内容乱码
我想将xml写入到文件中,在windows下测试没有问题,但是部署到Linux服务器上,就出现内容乱码的问题。我检查了Linux编码:echo $LANG 也是utf-8.
FileOutputStream fos=new FileOutputStream(new File("/usr/中文.xml"));
//writer=new XMLWriter(new FileWriter(new File("/usr/中文.xml")),format);
writer=new XMLWriter(fos,format);
开始的时候我用的是FileWriter,在windows上是没问题的,但是在Linux上死活不行。这个问题网上有很多博客都写了,换成FileOutputStream就可以了。但是文件的名字是不行的。
2、文件名称乱码
你用new File();创建的文件的中文名称会乱码,可能是???,也可能是。.啥乱码。然后你远程下载也是下载不了的,打开也是不行的,重命名可能也不行,远程工具可能会卡住。网上也有很多人说文件名是这个控制的,但是我试了没有用。如下所示,是不生效的:
System.setProperty("sun.jnu.encoding ","utf-8");
另外还有很多人说用字符转换:如下所示也是不生效的:
String filename2 = new String(filename.getBytes("gbk"),"utf-8");
我几乎没有招了,大多数都是这么说的,然而不行。我问了下我的一个同事,说你试试把utf-8直接写到里面去。我也只能试试,如下所示:
String filename2 = new String(filename.getBytes("utf-8"));
沸腾了,居然可以了,风停了,雨停了,我又觉得我行了。哈哈哈
3、逼话少说,上代码
附上xml转换的生成文件的代码:
//main函数里调用生成xml的方法
String xml="";
Document document = DocumentHelper.parseText(xml);
OutputXml ot = new OutputXml();
ot.outputxml(document,filename);
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class OutputXml {
//生成xml的方法
public void outputxml(Document doc,String filename){
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer;
try {
String filename2 = new String(filename.getBytes("utf-8"));
FileOutputStream fos=new FileOutputStream(new File(filename2));
writer=new XMLWriter(fos,format);
writer.write(doc);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
因为网上没人这么写,所以我整理了一下,希望遇到的小伙伴可以尝试一下。