在我做的一个项目中有一个功能是通过拼接字符串生成xml文件,在MyEclipse和Eclipse中运行都没问题,生成的xml文件是UTF-8格式,中文没有乱码,但是在我把项目打包成jar文件后,通过命令行来运行jar后,生成的xml文件中的中文却是乱码,我原来用的是通过字符流来输出内容,后来换成了字节流后生成的xml文件仍旧是乱码。还请大家帮忙分析一下原因。谢谢了啊
与生成xml文件的部分代码如下所示:File file = new File("success.xml");// 生成的xml文件名称
fos = new FileOutputStream(file, true);
bos = new BufferedOutputStream(fos);
bos.write(buffer.toString().getBytes());//buffer里面的内容是通过调用其他方法获取字符内容

解决方案 »

  1.   

    1 你的jar也是在同样的机器上运行的吗?
    2 最好不要自己拼xml。容易错,尤其是转义字符等;
    3 buffer是xml的内容吧,如果要用utf-8这里的getBytes("utf-8")。
      

  2.   

    恩 jar也是在同一个机子上的,因为xml文件较大,60M以上, 没法通过dom4j或者jdom来读写 只能通过拼接字符串来生成xml文件。生成的xml文件格式是UTF-8的,但就是 中文出现乱码。
      

  3.   

    PrintWriter writer = new PrintWriter(file,"UTF-8");writer.print(...);
    writer.println(...);
    writer.printf(...);
      

  4.   

    输出流没有指定编码时,采用系统默认编码如中文win32下是GBK
      

  5.   

    我看了一下 生成的xml文件属性是UTF-8格式的,并且只要是在开发工具中运行生成的xml文件中文就没有乱码。
      

  6.   

    一般 xml编辑器会自动检测 <?xml verison="1.0" encoding="utf-8"?> 这句里的encoding设置。ide里的运行环境 一般和直接在os下运行有区别。
      

  7.   

    谢谢大家,问题已解决。将
    bos.write(buffer.toString().getBytes());
    改为
    bos.write(buffer.toString().getBytes("UTF-8"));
    即可。
      

  8.   

    在命令行cmd里面运行 java -jar test.jar的时候,发现里面执行的汉字发生乱码。原来指定的是UTF-8.解决如下: java -Dfile.encoding=UTF-8 -jar -test.jar 加上JVM的参数,就OK了。