下面这段代码是想生成utf-8的字节流编码,在我自己的机器上运行是可以的,在另外一个同事机器上也行;但是在C同事的机器上运行却始终得到unicode编码的自己流,哪怕是把参数改为GBK,首先请大家看看是不是代码本身有问题,如果不是这个原因,不知道大家有什么好的建议或者原因分析呢?public static void main(String argv[]) { //MessageObject mo = new MessageObject("test.xml"); //String outStr = new String(mo.write2Bytes());
//MessageObject mo = new MessageObject();
try{
File NewFile = new File("e:\\TEST.TXT");
OutputStream  tempOutputStream=new FileOutputStream(NewFile);
// OutputStream tempOutputStream = new ByteArrayOutputStream(NewFile);
BufferedWriter  bufferedWriter = new BufferedWriter(new OutputStreamWriter(tempOutputStream, "UTF-8"));
bufferedWriter.write("中华人民共和国abc");
bufferedWriter.flush();
bufferedWriter.close();
}catch(Exception ex){
ex.printStackTrace();
}
//String orderByClause = mo.getCommonOrderByClause(); }大家可以把这段代码导进去试试,先谢过了!

解决方案 »

  1.   

    系统环境的默认编码呗
    做的完美一点,要想让每个系统都使用你的编码嘛
    一个办法是在运行程序之前,先跑一个设置环境变量的脚本
    另外一个办法么写数据的时候先做转码再写,类似这样
    String s = new String("中文".getBytes("utf-8"),"utf-8");
    bufferedWriter.write(s);
      

  2.   

    在我这测试的没问题!!
    我觉得是你系统默认编码的问题!!String s = new String("中文".getBytes("utf-8"),"utf-8");这样应该能解决你的问题!!
      

  3.   

    我个人觉得这可能是系统环境变量的问题,但是谁能告诉我如何设置这个环境变量呢,他的也是xp的系统,中文的,他可能是环境变量设置了,应该是System.encoding这个环境变量,但是用命令set不能看到这个环境变量,如果像beiouwolf和lz1236607所说那样,这样编码也太不灵活了,每new一个string,都要写这个。
      

  4.   

    lz1236607,你好,代码本身并没有问题,关键是好像jvm中的环境变量不起作用了。这比较头疼。
      

  5.   

    你是在代码里面写中文,所以要看你的java原文件的编码格式是什么
    打个比方
    你的java文件的编码格式是UTF-8的,你使用
    javac XX.java在中文操作系统(不改环境配置的那种)下
    java XX结果写入的就是乱码你要用javac -encoding utf-8 XX.java来编译你的java文件就行了
    就是你用A去编码,用B去解码就是乱码
      

  6.   

    yzeaho,你好,我想你误解我的意思了
    我只是想用java代码去生成utf-8编码的文件。我现在存在的不是代码的问题,代码在我的机器上和另外一个人机器上都是oK,现在的问题在于C同事的JVM有问题,他的jvm中的file.encoding 和system.encoding 根本不起作用,不知道有什么办法 可以保证他的jvm此处的设置生效?
    我试过了以下方法,都不生效:
    1. java -Dfile.encoding = UTF-8 test.class
    2. 到websphere下去修改charset,不生效
    3. 修改os的locale为英文,不生效
      

  7.   

    C同事上的生成的文件编码也是utf-8的吧,只是里面的汉字是乱码而已吧
    代码在我机子上跑的也没问题,文件编码都是utf-8的,只是改下环境参数就是里面的内容是乱码而已
      

  8.   

    NO, JUST XP, SIMPLE-CHINESE
      

  9.   

    no,c同事生成的不是乱码,是unicode的编码,请问你改的哪里的环境参数?
      

  10.   

    文件的文件编码和文件里面的汉字内容能不能在简体中文xp的操作系统上正确显示是两码事,记得在aix的机器上要跑个utf-8文件编码的shell脚本,打开全是乱码,但就是能跑,还能往数据库里面写汉字,改成正常显示的中文就是报错你的代码写死utf-8了,生成的文件的文件编码就是utf-8的,不知道你的怎么查看文件的文件编码格式的?你的unicode编码是从哪里得出来的?你先删除了他的文件在试试我就改了下java文件的文件编码为utf-8,重写了几个中文在代码里面,在中文xp下编译,运行,结果就是乱码,但文件编码格式还是utf-8的
      

  11.   

    呵呵,yzeaho,你可以好好看看utf-8编码的格式,utf8编码的中文是3个字节,英文1个字节,而且文件头有3个标识自己。  unicode则是2个字节(不论中英文,当然是32位机器)  ,我是用ultraedit直接看的二进制来判断的,不是显示的问题。  你的脚本在aix上能跑,是因为run的是二进制,而现实在gui上面,则是需要正确识别二进制的编码。
    可以多切磋,但是这个问题还是不得最佳解。
      

  12.   

    晕倒
    1、不是所有的utf-8的文件都有bom头
    2、因为已经是乱码了,就不在是中文汉字了,所以不能用中文是3个字节来判断,已不是以前的汉字了
    用editpuls看吧
    选择"Document"->"File Encoding"->"Change File Encoding..."
    第一个出来的就是该文件的文件编码
      

  13.   

    不是所有的二进制文件都会有utf-8的标识头,可以通过二进制位运算去判断,详细的你可以google一下。
    越讨论越跟我的问题远了。
      

  14.   

    另外,yzeaho,我还有个问题,你怎么知道我回复了,是不是csdn有个notice功能?
      

  15.   

    在灌水,汗最后问下,要不就没辙了,就等待高人吧
    请问你是用ue看二进制的吗?ue有utf-8自动转unicode的选项的,打开的话,ue会自动转的