linux服务器,服务器的lang,lc_all都是设置的是en_us.utf8。本地文件名应该是utf8编码(是另外tomcat程序通过用户上传保存下来).
现在机器上有另外一个java程序,启动的时候,
sh 脚本里会设置export Lang=gbk,java启动参数设置-Dfile.encoding=gbk。现在导致用File file=new File(filePath)报找不到文件。
如果把启动参数里的export Lang=gbk去掉就可以读到文件了。
由于是老程序,工程又很大,不敢把sh里的export Lang=gbk给去掉,希望想通过对filePath做一些编码处理看能不能读到,但都不成功。
java程序里对目录用listFile来拿到File实例,再拿到文件名进行打印
服务器上的文件名
String fileName = file.getFileName();
String fileName1 = new String(fileName.getBytes("GBK"), "UTF8"));
String fileName2 = new String(fileName.getBytes(), "UTF8"));
String fileName3 = new String(fileName.getBytes(), "GBK"));
String fileName4 = new String(fileName.getBytes("UTF8"), "GBK"));
其中fileName1和fileName2基本正常(有个字“书”却变成??)其他都是乱码。
如果用文件路径(文件路径是从数据库读回来的),下面几种尝试都不成功
File file1 = new File(new String(new String(filePath.getBytes(), "UTF-8").getBytes("UTF-8"), "GBK"));
logger.info(file1.getFileName() + file1.isExist())
File file2 = new File(new String(filePath.getBytes("UTF-8"), "GBK"));
logger.info(file2.getFileName() + file2.isExist())
File file3 = new File(new String(filePath.getBytes("GBK"), "UTF-8"));
logger.info(file3.getFileName() + file3.isExist())
File file4 = new File(new String(new String(filePath.getBytes(), "UTF-8").getBytes("GBK"), "GBK"));
logger.info(file4.getFileName() + file4.isExist())
求各位建议,非常感谢
发自「今日水木 on iPhone 8 Plus」
--
FROM 111.201.92.*