开发环境是WIN XP。运行环境是linux SUSE10.在开发环境跟了下代码,sysFileName 不是乱码;到linux SUSE10下运行文件名就是乱码了。加上这句后,sysFileName = new String(sysFileName.getBytes("GBK"), "UTF-8");开发环境都是乱码了。
            //由用户输入的名称和创建者的id,扩展名以及时间组合生成文件名
            sysFileName = UpFileEvent.generateSysFileName(fileInitName, operatorId);
            
            //得到指定的上传文件保存后对应的绝对路径 计算方式:配置文件中设置的路径加文件名
            sysFileName=UpFileEvent.getRealPath(sysFileName)            File file = new File(sysFileName);
            
            wasFileUpload.write(file);write方法/**
 * 将上传的文件写入指定的文件中 
 * 
 * @param file
 * @throws Exception
 */
public void write(File file) throws CustomException {
if (fileItem == null) {
throw new CustomException("fail", "upfileInvalid");
}
if (file == null) {
this.writeToFile();
} else {
this.writeFile(file);
}
}

解决方案 »

  1.   

    补发一下writeFile方法。
    public void writeFile(File file) throws CustomException {
    if (fileItem == null) {
    throw new CustomException("fail", "upfileInvalid");
    } // 获得文件长度
    long fileSize = fileItem.getSize();
    InputStream in = null;
    OutputStream out = null; try {
    in = fileItem.getInputStream();
    byte[] b = new byte[(int) fileSize];
    in.read(b);
    // 转换windows编码到本地编码
    // 只有文本文件按才需要转码(临时)
    if (getFileName().indexOf(".txt") != -1) {
    b = new String(b, fileCharacterSet).getBytes();
    }
    out = new FileOutputStream(file);
    out.write(b);
    out.flush();
    } catch (Exception e) {
    e.printStackTrace();
    throw new CustomException(e.toString());
    } finally {
    if (in != null) {
    try {
    in.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    if (out != null) {
    try {
    out.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }
      

  2.   

    补发一下服务器的编码
    mas@mas2000:/root> locale
    LANG=POSIX
    LC_CTYPE=en_US.UTF-8
    LC_NUMERIC="POSIX"
    LC_TIME="POSIX"
    LC_COLLATE="POSIX"
    LC_MONETARY="POSIX"
    LC_MESSAGES="POSIX"
    LC_PAPER="POSIX"
    LC_NAME="POSIX"
    LC_ADDRESS="POSIX"
    LC_TELEPHONE="POSIX"
    LC_MEASUREMENT="POSIX"
    LC_IDENTIFICATION="POSIX"
    LC_ALL=
      

  3.   

    这个我感觉是linux 和XP的编码的不一样
      

  4.   

    java版怎么这么冷淡呢?还是我给的分太低?
      

  5.   

    大多数的做法是 文件名是唯一的你可以用uuid实现 而真实的文件明会用另一个字段来保存的