在使用下面这个写法时候UTF-8文件编码 在读取时候出现乱码问题。

File myFile=new File("文件路径");

BufferedReader in = new BufferedReader(new FileReader(myFile));

应该修改为:

BufferedReader in = new BufferedReader( new InputStreamReader( new FileInputStream(myFile), "UTF-8") );

如果使用INSA编码时候 请使用下面文件读取方式:

InputStreamReader reader = new InputStreamReader(   new FileInputStream(new File("文件路径")), "gb2312");

下面是我对文件编码的判断方法:

/**
* 上传文件编码判断
* */
public static String get_charset(File file) {
String charset = "GBK";
byte[] first3Bytes = new byte[3];
try {
boolean checked = false;
;
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(file));
bis.mark(0);
int read = bis.read(first3Bytes, 0, 3);
if (read == -1)
return charset;
if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
charset = "UTF-16LE";
checked = true;
} else if (first3Bytes[0] == (byte) 0xFE
&& first3Bytes[1] == (byte) 0xFF) {
charset = "UTF-16BE";
checked = true;
} else if (first3Bytes[0] == (byte) 0xEF
&& first3Bytes[1] == (byte) 0xBB
&& first3Bytes[2] == (byte) 0xBF) {
charset = "UTF-8";
checked = true;
}
bis.reset();
if (!checked) {
// int len = 0;
int loc = 0; while ((read = bis.read()) != -1) {
loc++;
if (read >= 0xF0)
break;
if (0x80 <= read && read <= 0xBF) // 单独出现BF以下的,也算是GBK
break;
if (0xC0 <= read && read <= 0xDF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) // 双字节 (0xC0 - 0xDF)
// (0x80
// - 0xBF),也可能在GB编码内
continue;
else
break;
} else if (0xE0 <= read && read <= 0xEF) {// 也有可能出错,但是几率较小
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
charset = "UTF-8";
break;
} else
break;
} else
break;
}
} } bis.close();
} catch (Exception e) {
e.printStackTrace();
} return charset;
}

调用时候判断编码方式UTF-8 或是 INSA编码:

BufferedReader br = null;
if (charset == "GBK") {
InputStreamReader reader = new InputStreamReader(
new FileInputStream(new File(filepath)), "gb2312");
br = new BufferedReader(reader);
}
if (charset == "UTF-8") {
br = new BufferedReader(new InputStreamReader(
new FileInputStream(filepath), "UTF-8"));
}

最新文章

  1. linux终端常用快捷键
  2. Ubuntu下VSFTPD(五)(匿名FTP设置方法)
  3. Centos 6.5使用Bumblebee关闭N卡,冷却你的电脑
  4. yum源的配置
  5. Java读取property配置文件
  6. B+树介绍
  7. Python11
  8. 【C/C++】求解线性方程组的雅克比迭代与高斯赛德尔迭代
  9. STM32应用实例十四:利用光敏二极管实现光度测量
  10. 分治法——归并排序(mergesort)
  11. Python机器学习笔记:sklearn库的学习
  12. 整理的开源项目(全c#)
  13. dubbo 配置属性
  14. arc路径例子-磊哥
  15. golang 自定义类型的排序sort
  16. leetcode题解之Find the Duplicate Number
  17. java练习(一)数组、集合的运用
  18. Qt 的QString类的使用
  19. 一个Spark job的生命历程
  20. 关于__name__==&#39;__main__

热门文章

  1. 二叉搜索树的第k个节点
  2. 4.请介绍一下c++和Java的区别
  3. VUE项目问题之:去掉url中的#/
  4. 莫烦keras学习自修第五天【CNN卷积神经网络】
  5. 老男孩python学习自修第六天【pycharm的使用】
  6. 利用H5 FormData 实现表单中多图上传(可带其他如String类型数据)
  7. JSED204B
  8. Nginx 模块分类
  9. python爬虫requests模块
  10. Luogu4726 【模板】多项式指数函数(NTT+多项式求逆)