因为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文档乱码解决方法相关推荐

  1. mac打开chm文件_Mac无法打开TXT文件怎么办?Mac无法打开txt文档的解决方法

    有些朋友生活中或者工作时会遇到很多txt文件,但是你的mac打不开txt文件怎么办?因为Mac是默认不打开TXT文件的,为了解决这个问题,小编特意为大家找到了一个简单的mac打不开txt文件解决方法教 ...

  2. 未能打开文稿,文本编码不适用,Mac无法打开txt文档的解决方法

    经常使用纯文本文件(扩展名为TXT)来编写储文件的你,在打开文本文档的时候弹出「未能打开文稿XXX,编码"Unicode(UTF-8)不适用」这种情况怎么办呢?这里小编为大家带来了Mac无法 ...

  3. mysql 乱码恢复_数据恢复后文档乱码怎么办怎么修复

    原标题:数据恢复后文档乱码怎么办怎么修复 文件错误删除.移动存储提示格式化.存储设备读取错误是常见的数据丢失情况.网络上有很多数据恢复的操作教程,可是在自己实际操作的时候会出现很多情况,比如找回的数据 ...

  4. java后台代码添加超链接_Java 实现Excel文档添加超链接的代码

    超链接即内容链接,通过给特定对象设置超链接,可实现载体与特定网页.文件.邮件.网络等的链接,点击链接载体可打开链接目标,在文档处理中是一种比较常用的功能.本文将介绍通过Java程序给Excel文档添加 ...

  5. java word在线预览_java 生成word文档并且在线预览的问题

    富文本? 用iText或者PD4ML直接转换为pdf [code="java"] String outputFile = "D:/Test/demo_3.pdf" ...

  6. java打开word文件名乱码怎么解决_Word文档乱码怎么办?解决Word文档乱码的几种常见方法...

    最近Word经常出现问题,双击打开后就弹出"文件转换"的对话框,让选择装载此文件时要使用的编码,选择了简体中文,打开文档后还是乱码,遇到这种情况我们应该怎么办呢? 解决方法一: 把 ...

  7. WKWebView加载txt文档乱码

    当使用WKWebView预览ppt.Excel.word.txt等文件时,关于txt文档乱码情况,不用担心,对链接对应的文档进行UTF8编码.GBK和GB1830编码就OK了, SWIFT 5版本: ...

  8. java word文档生成_java生成word文档

    java生成word文档有多种方式: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现 ...

  9. Ubuntu1804和2004高版本,右键无法创建TXT文档的解决办法【未完待续】

    Ubuntu1804和2004高版本,右键无法创建TXT文档的解决办法[未完待续] 问题: Ubuntu1804和2004高版本,右键无法创建TXT文档 解决办法1:[常用] 1.打开终端 2.输入: ...

  10. Java 提示“找不到或无法加载主类” 解决方法

    Java 提示"找不到或无法加载主类" 解决方法 参考文章: (1)Java 提示"找不到或无法加载主类" 解决方法 (2)https://www.cnblog ...

最新文章

  1. Win2008远程多用户登陆的配置方法
  2. 在内网中使用maven_搭建私有maven仓库并在项目中使用
  3. [转]ASP.NET 缓存(十六)--检索缓存项的值
  4. 山东外贸职业学院王彩霞老师网上考试系统及c语言考试题库》,2019年山东外贸职业学院单独招生考试 《语文》考试大纲(夏季高考)...
  5. VS Tips]Visual Studio 2008 Toolbox里控件消失(#13119)的问题
  6. 『设计模式』HR:不会设计模式,你好意思来面试?(面试必备设计模式)
  7. 在Winform中菜单动态添加“最近使用文件”
  8. Linux的chattr与lsattr命令详解(重点-i参数,锁定文件,禁止修改文件)
  9. 简化业务代码开发:看Lambda表达式如何将代码封装为数据
  10. java B2B2C springmvc mybatis电子商城系统:分布式配置中心
  11. 引介 | RLP 编码和解码
  12. java 同步块_java 同步块(Java Synchronized Blocks)
  13. 闲鱼是怎么让二手属性抽取准确率达到95%+的?
  14. JavaWeb随手笔记
  15. matlab中circle函数_MATLAB如何用自带函数画圆
  16. 解决Ubuntu和Windows不能相互复制粘贴的问题
  17. 文件为只读模式,且无法更改权限
  18. linux下c语言读取docx,Linux下的C语言编程.docx
  19. 睡着化妆整形都可以人脸识别刷脸支付
  20. mysql的load data_【MySQL】load data语句详解(一)

热门文章

  1. GBase项目管理实践总结——WBS分解的关键事项
  2. Java 夯实基础之注解
  3. 【毕业设计】基于Android的家校互动平台开发(内含完整代码和所有文档)——爱吖校推(你关注的,我们才推)...
  4. Excel在数据分析和日常工作的运用
  5. jQuery API中文手册详解
  6. amos看拟合度在哪里看_AMOS分析技术:结构方程模型的拟合度评价指标
  7. 「基因组组装」用AMOS/minimus2合并两个contig
  8. php本地如何开启websocket遇到的坑
  9. welearn视听说 读写 答题助手 综合插件
  10. 计算材料学与第一性原理、分子动力学、蒙特卡洛计算方法