判断文件编码格式和解决乱码
/**
* 判断文件的编码格式
*
* @param is
* @return 文件编码格式
* @throws Exception
*/
public static String getCharset(InputStream is) throws IOException {
BufferedInputStream bin = new BufferedInputStream(is);
int p = (bin.read() << 8) + bin.read();//读取文件头前16位
String code = null;
switch (p) {
case 0xefbb:
code = "UTF-8";
break;
case 0xfffe:
code = "Unicode";
break;
case 0xfeff:
code = "UTF-16";
break;
default:
code = "GB2312";
}
return code;
}
/**
* 解决txt乱码问题
*
* @param is
* @param targetFile 转换完成后的新文件
* @param code 需要转换的文件的编码格式
* @return File
* @throws IOException
*/
public static File FileTurnUTF8(InputStream is, File targetFile, String code) throws IOException {
if (!targetFile.exists()) {
targetFile.createNewFile();
}
BufferedReader br;
BufferedWriter bw;
br = new BufferedReader(new InputStreamReader(is, code));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(targetFile), StandardCharsets.UTF_8));
String str;
while ((str = br.readLine()) != null) {
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
str = new String(bytes, 0, bytes.length);
bw.write(str + "\r\n");
}
br.close();
bw.close();
return targetFile;
}