CSV 文件 上传 乱码
项目有上传csv文件的功能的,一开始upload中文的文件是没有乱码出现的,但是某一版本开始就出现乱码了。
调试了很多方法,发现上传的格式是没有错的,请求的编码和接受的编码是一致的,但还是出现乱码。
后来检查代码发现是读取csv文件的时候出现乱码,原来的写法是没有规定使用哪种编码来读取csv文件,所以读取出来的代码乱码了,更换了读取csv文件的写法,并使用UTF-8编码格式来读取后,乱码的文件就解决了!
原来的写法:
public void test42() throws IOException {
String fileName = "D:\Logs\MMS\upload_9e6610d5_e516_4902_81ed_374763055092_00000000.tmp";
java.io.File file = new java.io.File(fileName);
BufferedReader reader = null;
try {
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
System.out.println("line " + line + ": " + tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
更改后的写法:
public void test42() throws IOException {
String fileName = "D:\Logs\MMS\upload_9e6610d5_e516_4902_81ed_374763055092_00000000.tmp";
java.io.File file = new java.io.File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
try {
System.out.println("以行为单位读取文件内容,一次读一整行:");
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = br.readLine()) != null) {
// 显示行号
System.out.println("line " + line + ": " + tempString);
line++;
}
br.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e1) {
}
}
}
}
乱码的问题很多时候都是出现在读取的时候没有规定编码或者读与取使用了不一样的编码,所以出现乱码可以先查看读取到编码是不是使用了不一样的编码。
然后发现每次修改完csv文件后,都会默认键csv文件保存为 ANSI 编码格式,但是我们的项目是用统一用UTF-8的,所以upload就出现乱码了。
用notepad++吧csv文件的保存格式修改为UTF-8后,就没有出现乱码了