java 读取txt乱码问题_Java读取txt文档乱码解决方法
因为txt默认的选项是ANSI,即GBK编码。GBK和GB2312都是中文编码,先解释一下两者的区别。
总体说来,GBK包括所有的汉字,包括简体和繁体。而gb2312则只包括简体汉字。
GBK编码是中国大陆制订的、等同于UCS的新的中文编码扩展国家标准。GBK工作小组于1995年10月,同年12月完成GBK规范。该编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。
那么如何查看txt的编码呢,教你一个笨笨的办法:打开文档——另存为,然后看到最下面的编码,默认选择的就是当前文档的编码格式)。
txt文本文档有四种编码选项:ANSI、Unicode、Unicode big endian、UTF-8;默认应该是ANSI选项,就是系统的默认编码,一般是GBK。
因此我们读取txt文档可能有时候并不知道其编码格式,所以需要用进程动态判断获取txt文档编码,这里给一点资料,参考参考:
ANSI: 无格式定义
Unicode: 前两个字节为FFFE Unicode文档以0xFFFE开头
Unicode big endian: 前两字节为FEFF
UTF-8: 前两字节为EFBB UTF-8以0xEFBBBF开头
用进程取出前几个字节并进行判断即可。
首先对java中得编码格式进行了研究。发现在java中
java编码与txt编码对应:
javatxtunicodetxt
utf-8utf-8
utf-16unicode
gb2312ANSI
java读取txt文档,如果编码格式不匹配,就会出现乱码现象。所以读取txt文档的时候需要设置读取编码。txt文档编码格式都是写在文档头的,在进程中需要先解析文档的编码格式,获得编码格式后,在按此格式读取文档就不会产生乱码了。
代码示例如下:package com.lfl.attachment;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
public class TextMain {
public static void main(String[] args) throws Exception {
String filePath = "D:/article.txt";
// String filePath = "D:/article333.txt";
// String filePath = "D:/article111.txt";
String content = readTxt(filePath);
System.out.println(content);
}
/**
* 解析普通文本文档 流式文档 如txt
* @param path
* @return
*/
@SuppressWarnings("unused")
public static String readTxt(String path){
StringBuilder content = new StringBuilder("");
try {
String code = resolveCode(path);
File file = new File(path);
InputStream is = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(is, code);
BufferedReader br = new BufferedReader(isr);
// char[] buf = new char[1024];
// int i = br.read(buf);
// String s= new String(buf);
// System.out.println(s);
String str = "";
while (null != (str = br.readLine())) {
content.append(str);
}
br.close();
} catch (Exception e) {
e.printStackTrace();
System.err.println("读取文档:" + path + "失败!");
}
return content.toString();
}
public static String resolveCode(String path) throws Exception {
// String filePath = "D:/article.txt"; //[-76, -85, -71] ANSI
// String filePath = "D:/article111.txt"; //[-2, -1, 79] unicode big endian
// String filePath = "D:/article222.txt"; //[-1, -2, 32] unicode
// String filePath = "D:/article333.txt"; //[-17, -69, -65] UTF-8
InputStream inputStream = new FileInputStream(path);
byte[] head = new byte[3];
inputStream.read(head);
String code = "gb2312"; //或GBK
if (head[0] == -1 && head[1] == -2 )
code = "UTF-16";
else if (head[0] == -2 && head[1] == -1 )
code = "Unicode";
else if(head[0]==-17 && head[1]==-69 && head[2] ==-65)
code = "UTF-8";
inputStream.close();
System.out.println(code);
return code;
}
}
java 读取txt乱码问题_Java读取txt文档乱码解决方法相关推荐
- mac打开chm文件_Mac无法打开TXT文件怎么办?Mac无法打开txt文档的解决方法
有些朋友生活中或者工作时会遇到很多txt文件,但是你的mac打不开txt文件怎么办?因为Mac是默认不打开TXT文件的,为了解决这个问题,小编特意为大家找到了一个简单的mac打不开txt文件解决方法教 ...
- 未能打开文稿,文本编码不适用,Mac无法打开txt文档的解决方法
经常使用纯文本文件(扩展名为TXT)来编写储文件的你,在打开文本文档的时候弹出「未能打开文稿XXX,编码"Unicode(UTF-8)不适用」这种情况怎么办呢?这里小编为大家带来了Mac无法 ...
- mysql 乱码恢复_数据恢复后文档乱码怎么办怎么修复
原标题:数据恢复后文档乱码怎么办怎么修复 文件错误删除.移动存储提示格式化.存储设备读取错误是常见的数据丢失情况.网络上有很多数据恢复的操作教程,可是在自己实际操作的时候会出现很多情况,比如找回的数据 ...
- java后台代码添加超链接_Java 实现Excel文档添加超链接的代码
超链接即内容链接,通过给特定对象设置超链接,可实现载体与特定网页.文件.邮件.网络等的链接,点击链接载体可打开链接目标,在文档处理中是一种比较常用的功能.本文将介绍通过Java程序给Excel文档添加 ...
- java word在线预览_java 生成word文档并且在线预览的问题
富文本? 用iText或者PD4ML直接转换为pdf [code="java"] String outputFile = "D:/Test/demo_3.pdf" ...
- java打开word文件名乱码怎么解决_Word文档乱码怎么办?解决Word文档乱码的几种常见方法...
最近Word经常出现问题,双击打开后就弹出"文件转换"的对话框,让选择装载此文件时要使用的编码,选择了简体中文,打开文档后还是乱码,遇到这种情况我们应该怎么办呢? 解决方法一: 把 ...
- WKWebView加载txt文档乱码
当使用WKWebView预览ppt.Excel.word.txt等文件时,关于txt文档乱码情况,不用担心,对链接对应的文档进行UTF8编码.GBK和GB1830编码就OK了, SWIFT 5版本: ...
- java word文档生成_java生成word文档
java生成word文档有多种方式: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现 ...
- Ubuntu1804和2004高版本,右键无法创建TXT文档的解决办法【未完待续】
Ubuntu1804和2004高版本,右键无法创建TXT文档的解决办法[未完待续] 问题: Ubuntu1804和2004高版本,右键无法创建TXT文档 解决办法1:[常用] 1.打开终端 2.输入: ...
- Java 提示“找不到或无法加载主类” 解决方法
Java 提示"找不到或无法加载主类" 解决方法 参考文章: (1)Java 提示"找不到或无法加载主类" 解决方法 (2)https://www.cnblog ...
最新文章
- Win2008远程多用户登陆的配置方法
- 在内网中使用maven_搭建私有maven仓库并在项目中使用
- [转]ASP.NET 缓存(十六)--检索缓存项的值
- 山东外贸职业学院王彩霞老师网上考试系统及c语言考试题库》,2019年山东外贸职业学院单独招生考试 《语文》考试大纲(夏季高考)...
- VS Tips]Visual Studio 2008 Toolbox里控件消失(#13119)的问题
- 『设计模式』HR:不会设计模式,你好意思来面试?(面试必备设计模式)
- 在Winform中菜单动态添加“最近使用文件”
- Linux的chattr与lsattr命令详解(重点-i参数,锁定文件,禁止修改文件)
- 简化业务代码开发:看Lambda表达式如何将代码封装为数据
- java B2B2C springmvc mybatis电子商城系统:分布式配置中心
- 引介 | RLP 编码和解码
- java 同步块_java 同步块(Java Synchronized Blocks)
- 闲鱼是怎么让二手属性抽取准确率达到95%+的?
- JavaWeb随手笔记
- matlab中circle函数_MATLAB如何用自带函数画圆
- 解决Ubuntu和Windows不能相互复制粘贴的问题
- 文件为只读模式,且无法更改权限
- linux下c语言读取docx,Linux下的C语言编程.docx
- 睡着化妆整形都可以人脸识别刷脸支付
- mysql的load data_【MySQL】load data语句详解(一)
热门文章
- GBase项目管理实践总结——WBS分解的关键事项
- Java 夯实基础之注解
- 【毕业设计】基于Android的家校互动平台开发(内含完整代码和所有文档)——爱吖校推(你关注的,我们才推)...
- Excel在数据分析和日常工作的运用
- jQuery API中文手册详解
- amos看拟合度在哪里看_AMOS分析技术:结构方程模型的拟合度评价指标
- 「基因组组装」用AMOS/minimus2合并两个contig
- php本地如何开启websocket遇到的坑
- welearn视听说 读写 答题助手 综合插件
- 计算材料学与第一性原理、分子动力学、蒙特卡洛计算方法