Java CSV 导出 在日文环境下乱码解决

public  void createCsvFile(String fileName,String sep, Object titalObj, List dataList) throws  IOException {
response.reset();
response.setCharacterEncoding("UTF-8");
String sfilename = URLDecoder.decode(fileName, "UTF-8"); 
response.setHeader("Content-disposition", "attachment;filename="+ fileName + ".csv");

// 设置CSV分隔符号
sep = sep == null ? "," : (sep.equals("2") ? "\t" : ",");
OutputStream os = null;
os = response.getOutputStream();
os.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }); //此处为解决乱码的必要代码 并且在下面用到getBytes()方法的地方,写作getBytes("UTF-8")
List titalList = null;
String[] titalArray = null;
if(titalObj instanceof List){ //判断标题参数的类型,如果是List
titalList = (List)titalObj;
if(titalList!=null&&titalList.size()>0){
Object obj = null;
List<String> testList = null;
String testStr = "";
for(int i=0;i<titalList.size();i++){
obj = titalList.get(i);
if(obj instanceof List){
testList = (List<String>)obj;
for(int j=0;j<testList.size();j++){
if(j>0){
os.write(sep.getBytes("UTF-8"));
}
testStr = ActyCommonUtil.killNull(testList.get(j));
if (testStr!=null&&sep.equals(",")&&testStr.contains(",")){
testStr="\""+testStr+"\"";
};
os.write(testStr.getBytes("UTF-8"));
}
os.write(System.getProperty("line.separator").getBytes("UTF-8"));
}else if(obj!=null&&obj instanceof String){
if(i>0){
os.write(sep.getBytes("UTF-8"));
}
testStr = ActyCommonUtil.killNull(String.valueOf(obj));
if (testStr!=null&&sep.equals(",")&&testStr.contains(",")){
testStr="\""+testStr+"\"";
};
os.write(testStr.getBytes("UTF-8"));
}

}
if(obj instanceof String){
os.write(System.getProperty("line.separator").getBytes("UTF-8"));
}
}
}else if(titalObj instanceof String[]){
titalArray = (String[])titalObj;
if(titalArray!=null&&titalArray.length>0){
for(int i=0;i<titalArray.length;i++){
if(i>0){
os.write(sep.getBytes("UTF-8"));
}
os.write(ActyCommonUtil.killNull(titalArray[i]).getBytes("UTF-8"));
}
os.write(System.getProperty("line.separator").getBytes("UTF-8"));
}
}

Object objData = null;
if(dataList!=null&&dataList.size()>0){
objData = dataList.get(0);
if(objData instanceof List){
List<List<String>> data = (List<List<String>>)dataList;
for (List<String> row : data) {
int i=0,j=row.size();
for (String col : row) {
if (col!=null&&sep.equals(",")&&col.contains(",")){
col="\""+col+"\"";
};
os.write(col.getBytes("UTF-8"));
i++;
if (i<j){
os.write(sep.getBytes("UTF-8"));
}
}
os.write(System.getProperty("line.separator")
.getBytes("UTF-8"));
}
os.flush();
}
}
os.close();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值