解决Java读取File乱码问题
来源:互联网 发布:在c语言中char型数据 编辑:程序博客网 时间:2024/06/03 13:50
一开始的代码是
BufferedReader br = new BufferedReader(new FileReader(file));
// TODO 解析br.readline();
因为JVM的默认编码是UTF-8,所以在读取UTF-8编码的文件就木有问题。
但是因为我的win是中文版的,新建.txt文件默认格式是ANSI编码,这时候就会出现乱码。
解决方案:
所以必须调用例外一个API
BufferedReader br = new BufferedReader(new FileInputStreamReader(new FileInputStream(file), charset);
即以指定编码读取文件,这里的charset就是指定的编码,UTF-8、GBK等等。
为了适用所有文件编码,必须先动态识别文件的编码格式。具体的识别方式就不在这里讨论了,但是度娘给出的很多方法都不是特别好,
所以我还是用了第三方库cpdetector.jar来识别文件格式,官网链接http://sourceforge.net/projects/cpdetector/
部分源码如下:
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
detector.add(new ParsingDetector(false));
detector.add(JChardetFacade.getInstance()); // 需要另外一个第三方库jchardet.jar
detector.add(ASCIIDetector.getInstance());
detector.add(UnicodeDetector.getInstance());
java.nio.charset.Charset set = detector.detectCodepage(file.toURI().toURL());
String charsetName = set.name();
// 除了GB开头的编码,其他一律用UTF-8
String charset = charsetName != null && charsetName.startsWith("GB") ? charsetName : "UTF-8";
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset));
// TODO 解析reader.readline();
} finally {
reader.close();
}
最后附上jcharset.jar的maven dependency
<dependency>
<groupId>net.sourceforge.jchardet</groupId>
<artifactId>jchardet</artifactId>
<version>1.0</version>
</dependency>
- 解决Java读取File乱码问题
- Java读取文件 解决中文乱码问题
- 解决读取文件乱码问题
- Java读取properties文件中文乱码问题的解决
- 解决 JAVA读取本地ANSI文件乱码问题
- Java 解决FileInputStream读取中文时乱码的问题
- Java读取、写入文件如何解决乱码问题
- 解决Java读取properties文件中文乱码的问题
- JAVA本地读取文件,解决中文乱码问题
- 解决java乱码问题
- 解决java 乱码问题
- java解决乱码问题
- Python java解决中文乱码问题,读取文本文件为乱码,编辑器打开正常
- JAVA读取PHP乱码问题
- 解决使用Properties,读取中文乱码问题
- 解决读取文件乱码问题小结
- 解决BB10读取中文乱码的问题
- 解决中文随机读取的乱码问题
- Prim算法学习
- Unity3D获取网络时间,解析xml/截取string
- 如何不浪费网站流量 网站做好二次营销的几个方案
- 我的c博客第一天
- 黑马程序员--传统定时器的回顾
- 解决Java读取File乱码问题
- ORA-00600: internal error code, arguments: [2730], [331], [1], [4], [110], [110], [512], [512], [],
- 用法char ch=getchar()正确性详解 《C陷阱与缺陷》 chap5.1
- Windows 下获取USB设备信息的通用浏览器插件实现
- Android实现通用的ActivityGroup(效果类似Android微博客户端主界面),强烈建议不要再使用TabActivity
- XMPP 服务器 Openfire 的 Emoji 支持问题(进行部分修改)
- 怎么使float保留两位小数或多位小数
- android中的分辨率、行高和字体大小
- extjs time order