最近无聊,在做一个小程序,程序需要生成脚本,就用了FileWriter fileWriter = new FileWriter("C:\\test\\test.ssd");,但是后来发现编码格式要是Unicode的,就改用了 OutputStreamWriter outPutStreamWriter = new OutputStreamWriter(new FileOutputStream("C:\\test\\Test.ssd"),"Unicode");但是生成文件后确是Unicode big endian的,就改用new String来强制转换,但是转换后也不行求助,如何才能让生成的脚本是Unicode的,最好附代码.

解决方案 »

  1.   

    Charset charset = Charset.forName("UTF-8");
    // Charset charset = Charset.forName("UTF-16BE");
    // Charset charset = Charset.forName("UTF-16LE");
    PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream("..."),charset));BufferedWriter reader = new BufferedReader(new InputStreamReader(new FileInputStream("..."),charset));
      

  2.   

    UTF-16BE 的话,脚本就没写入东西,UTF-16LE的话,脚本后缀就倒过来了
      

  3.   

    应该是
    new FileOutputStream("C:\\test\\Test.ssd"),"UTF-16LE"
    的啊,楼主所说“脚本后缀就倒过来了”是什么意思呢?
      

  4.   

    就是UTF-8的话,生成文本,里面内容,都没有问题,
    UTF-16LE的话,里面的东西乱码了
    UTF-16BE的话,里面写不进内容。
      

  5.   

    知道啊,写脚本是为了给另外一个程序发送的,但是另外一个程序只认Unicode
    自己新建一个文本,将文本格式另存为Unicode发送是没有问题的
    用自己写的软件发送的话,编码转不成Unicode,就乱码了
      

  6.   

    其实默认Unicode就应该是BE的。
    那个程序很奇怪嘛。
      

  7.   

    是的貌似还没找到java生成编码为Unicode的
    都是BE
      

  8.   

    UTF-16/Unicode 和 UTF-16BE/UnicodeBigUned 不同。
    文字内容:你好
    $ hexdump u16.txt 
    0000000 fffe 604f 7d59                         
    0000006$ hexdump u16be.txt
    0000000 604f 7d59                              
    0000004
      

  9.   

    楼主,这样看看行不? bw = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream("C:\\test\\Test.ssd"), "UTF-16LE"));
    bw.write(0xFEFF); 
    bw.write(你真正要写的字符串);