今天使用bootstrap的fileinput上传txt文件,但是前台预览和后台inputStream都是乱码,大概就是这么个情况:
在网上看,基本都是引入语言文件、设置language:“zh”参数什么的,试了一下还是没有解决,然后在后台文件上传代码打了个断点,发现了猫腻:
inputStream = file.getInputStream();
set.add(txtOriginalFilename);
wakeVisibleLight = new WakeVisibleLight();
wakeVisibleLight.setvId(0);
txtMsgMap = HdfsUtils.getConfigMsgMap(inputStream);
// 根据txt信息对实体类赋值
setWakeVisibleLightInfo(txtMsgMap, wakeVisibleLight);
txtMsgMap获取到的数据为乱码,然后进getConfigMsgMap的源码看一下:
Map<String, String> map = new HashMap<String, String>(16);
String resultTxtMsg = getStrFromInputSteam(fileInputStream);
发现调用了getStrFromInutSteam这个方法,点进去发现了问题:
/**
*
* @Method: getStrFromInputSteam
* @Description: (读取文件转换成String字符串)
* @param in InputStream流
* @return
* @throws Exception (参数描述) String (返回类型描述)
*/
public static String getStrFromInputSteam(InputStream in) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(in, "UTF-8"));
// 最好在将字节流转换为字符流的时候 进行转码
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = bf.readLine()) != null) {
buffer.append(line);
buffer.append("/t");
}
return buffer.toString();
}
转换字节流的时候是UTF-8编码,检查一下txt文件编码格式,果然是别的格式,果断修改为utf-8,问题解决。