- 浏览: 365649 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (352)
- JAVAEE (155)
- Gwt (27)
- Android (6)
- TaoBao (0)
- Xiaonei (0)
- Ubuntu (1)
- javafx (1)
- flex (0)
- GAE (2)
- Arcgis (1)
- Extjs (5)
- Dwr (1)
- ExtjsDwrSpring整合 (2)
- ophone (0)
- php (1)
- python (8)
- squid for windows download (1)
- Java (3)
- oracle (1)
- jquery (1)
- 淘宝 (1)
- 人生 (0)
- java项目运行时增加 (1)
- xfire (1)
- jquery mobile (1)
- ES (3)
- logstash (2)
- 8080端口占用 (1)
- 通达信 (1)
- mysql启动故障 (1)
- 微信小程序 (3)
- centos (1)
- redis (1)
- springcloud (1)
- python3.9 (1)
- python2.7 (1)
- ta-lib (0)
- ta-lib,TALIB (1)
- 安装TALIB,CENTOS (1)
- 终端关闭后 (1)
- vi (1)
- 命令行 (1)
- tomcat (2)
- nginx (3)
- linux (2)
- jdk (1)
- 开发环境 (1)
- nodejs (1)
- vs code (1)
- node js 全部版本 (1)
- JAVASCRIPT (1)
- pychar (1)
- mysql (3)
- win10 (1)
- elasticsearch plugin (1)
- vue (10)
- editplus (0)
- clickhouse (6)
- zabbix (1)
- quicktracking (1)
- quiktraking (1)
- talib (1)
- docker (1)
- excel (1)
- bat (1)
- 大模型 (1)
最新评论
-
ian_jiang:
不知道 你说了个 什么?
GWT下如何获取到javaee servlet下会话信息 -
心愿:
index.jsp应该建立在哪个目录下
dwr3.0的HELLOWORLD创建过程 -
349446658:
classpath:path是老的指定配置文件路径的方式。升级 ...
升级2 -
349446658:
新版本不是在type中指定first,而是指定1来表示跳到第一 ...
分页错误2 -
349446658:
这是因为后面的版本规范了指定配置文件路径的方式,必须指定为如下 ...
升级错误
java读取txt文件乱码解决方案
2017年09月19日 14:42:52 sysmedia 阅读数 3682
因为txt默认的选项是ANSI,即GBK编码。GBK和GB2312都是中文编码,在这里解释一下两者的区别。
总体说来,GBK包括所有的汉字,包括简体和繁体。而gb2312则只包括简体汉字。
GBK: 汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中所有的汉字20902,总共收录了883个符号, 21003个汉字及提供了1894个造字码位。 Microsoft简体版中文Windows 95就是以GBK为内码,又由于GBK同时也涵盖了Unicode所有CJK汉字,所以也可以和Unicode做一一对应。
GB码,全称是GB2312-80《信息交换用汉字编码字符集 基本集》,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。P-Windows3.2和苹果OS就是以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码、但兼容支持GB2312。GB码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755,以拼音排序,二级字3008,以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了很大作用。
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编码对应
java txt
unicode unicode big endian
utf-8 utf-8
utf-16 unicode
gb2312 ANSI
java读取txt文件,如果编码格式不匹配,就会出现乱码现象。所以读取txt文件的时候需要设置读取编码。txt文档编码格式都是写在文件头的,在程序中需要先解析文件的编码格式,获得编码格式后,在按此格式读取文件就不会产生乱码了。
代码示例如下:
Java代码 收藏代码
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;
}
}
注意:在resolveTxt方法中不能通过readTxt方法传InputStream流 ,这样会使两个方法持有同一个流引用,而在resolveTxt方法中已读过流中的三个字节,流中的pos此时已经是3了,而不是流的起始位置,再在readTxt中读取时就会出现IOException:Read Error。
2017年09月19日 14:42:52 sysmedia 阅读数 3682
因为txt默认的选项是ANSI,即GBK编码。GBK和GB2312都是中文编码,在这里解释一下两者的区别。
总体说来,GBK包括所有的汉字,包括简体和繁体。而gb2312则只包括简体汉字。
GBK: 汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中所有的汉字20902,总共收录了883个符号, 21003个汉字及提供了1894个造字码位。 Microsoft简体版中文Windows 95就是以GBK为内码,又由于GBK同时也涵盖了Unicode所有CJK汉字,所以也可以和Unicode做一一对应。
GB码,全称是GB2312-80《信息交换用汉字编码字符集 基本集》,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。P-Windows3.2和苹果OS就是以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码、但兼容支持GB2312。GB码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755,以拼音排序,二级字3008,以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了很大作用。
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编码对应
java txt
unicode unicode big endian
utf-8 utf-8
utf-16 unicode
gb2312 ANSI
java读取txt文件,如果编码格式不匹配,就会出现乱码现象。所以读取txt文件的时候需要设置读取编码。txt文档编码格式都是写在文件头的,在程序中需要先解析文件的编码格式,获得编码格式后,在按此格式读取文件就不会产生乱码了。
代码示例如下:
Java代码 收藏代码
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;
}
}
注意:在resolveTxt方法中不能通过readTxt方法传InputStream流 ,这样会使两个方法持有同一个流引用,而在resolveTxt方法中已读过流中的三个字节,流中的pos此时已经是3了,而不是流的起始位置,再在readTxt中读取时就会出现IOException:Read Error。
发表评论
-
SpringCloud00 _Restemplate的getForEntity、getForObject、 postForEntity、postForObjec
2022-10-20 02:26 471SpringCloud00 _Restemplate的get ... -
java键盘机器人
2022-08-18 16:26 448package com.yuexiu.yxdp.rpt.be ... -
java常用快捷键
2022-08-18 15:47 474IDEA中常用快捷键 psvm —— 用来快速写一个ma ... -
idea在旧环境里安装又出这个问题了
2022-08-11 17:33 2714这个一眼就看出来是找不到jre的错误。关键 ... -
mysql 5.5的安装包官网下载地址
2022-07-07 21:09 558https://downloads.mysql.com/arc ... -
idea java开发快捷键
2022-07-07 15:02 294在dao层的mapper类里。直接按住ctrl+左键可定位.x ... -
plugin
2022-07-05 10:45 293INFO] Finished at: 2022-07-05T1 ... -
maven配置,通用setting.xml配置-改为阿里云
2022-07-04 10:50 690maven配置,通用setting.xml配置-改为阿里云 ... -
启动模块时报错,命令行过长,command is too long.
2022-07-04 06:42 1857启动模块时报错,命令行过长,command is too lo ... -
node js 全部版本
2022-07-01 10:58 2769https://nodejs.org/en/download/ ... -
post json
2022-07-01 08:00 247try { String ding ... -
post json
2022-07-01 07:56 229package com.arpenker.stockrobot ... -
resttemplate
2022-06-30 15:21 286private static ResponseEntity&l ... -
量化工
2022-06-30 09:54 624String url = "https://api. ... -
eclipse快捷键
2022-06-30 09:18 311package shortcutKey; public cl ... -
ideajdk
2022-06-10 08:06 268「ideajdk」https://www.aliyundriv ... -
nohup java
2022-05-30 19:02 722nohup java -jar test.jar > . ... -
nohup java
2022-05-30 18:36 974springboot 项目内嵌tomcat,一般打包成jar ... -
查服务器硬盘内存CPU
2022-05-25 17:31 427grep MemTotal /proc/meminfo # ... -
tomcat8 和 jdk8
2022-05-21 08:06 380「tomcat8jdk8」https://www.aliyu ...
相关推荐
java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt...
"Java读取TXT文本文件乱码解决方案" Java 读取 TXT 文本文件乱码解决方案中,主要讨论的是在 Java 中读取 TXT 文本文件时出现乱码的问题,并提供了解决方案。 首先,文章中提供了一个简单的读取 TXT 文件的代码,...
下面我们将深入探讨如何在Java中正确地读取和写入CSV文件,以及解决中文乱码的问题。 1. **字符编码的理解**: - 在处理中文字符时,必须确保使用正确的字符编码,例如UTF-8。UTF-8是一种广泛支持的编码格式,可以...
在Java编程中,读取和写入TXT文件时,经常遇到中文乱码的问题。这是因为Java默认的字符编码可能与TXT文件的实际编码不一致,导致字符无法正确解析。本篇文章将深入探讨这个问题,并提供完整的源码解决方案。 首先,...
java读取txt文件,可以以文件路径构造这个流,:FileInputStream fin = new FileInputStream("d:/test.txt"); 然后使用这个流直接读取到文件,再使用reader构造BufferedReader,按行读取一整行的文本,作为字符串返回...
下面将详细讨论如何在C++中正确地读写TXT文件以及如何解决可能出现的乱码问题。 首先,我们来看C++如何读取TXT文件。C++标准库提供了`fstream`类来处理文件操作,包括`ifstream`(输入文件流)和`ofstream`(输出...
### Java读取TXT文件知识点详解 #### 一、导入必要的包 在Java程序中,我们需要首先导入处理文件读写的必要类库。在这个示例中,我们看到了`import java.io.*;`这一行代码,它表明了该程序将使用Java标准库中的`...
Java 读写文件避免中文乱码 Java 语言在读写文件时,经常会 gặp到中文乱码的问题。这是因为 Java 默认使用的字符编码是 ISO-8859-1,而中文字符在这个编码中无法正确地表示。为了避免中文乱码,需要使用正确的...
在Java编程中,读取包含中文字符的文件时可能会遇到乱码问题,这通常是由于编码格式不匹配导致的。要解决这个问题,我们需要理解文件的原始编码格式,并在Java代码中正确地设置字符集。以下是一些相关的知识点: 1....
从给定的文件信息来看,主要关注点在于Java读取TXT文件的代码示例,以及如何处理和操作从TXT文件中读取的数据。下面将详细解释这一知识点。 ### Java读取TXT文件的基本流程 在Java中,读取TXT文件通常涉及以下几个...
### Java创建TXT文件并执行读写操作:详细解析与代码示例 在现代软件开发中,文件处理是一项基本且重要的任务。Java作为一种广泛使用的编程语言,提供了强大的API来支持文件的创建、读取、写入以及修改等操作。本文...
使用java语言,通过调用FileReader类读取txt文件中的数据。资源是可直接实现的代码。
Java 读取 TXT 文本文件时遇到乱码问题通常是由于编码格式不匹配导致的。在 Java 中,当读取文本文件时,默认使用的是平台的默认编码,这在处理某些特定编码的文件时可能会引发乱码。以下是针对这个问题的详细解释和...
解决Labview中关于读取txt文本文件,读出来是乱码的问题
环境:eclipse3.7.2 jre1.6
根据提供的文件信息,我们可以总结出以下关于Java读取TXT文档的知识点: ### 一、导入必要的包 在Java中读取文件之前,首先需要导入一些必要的包,这些包提供了处理文件的基本工具。在这个例子中,涉及到的包有: ...
在Android平台上,开发人员经常遇到一个棘手的问题,那就是如何正确地读取包含中文字符的TXT文件,因为不恰当的处理往往会导致乱码。本文将深入探讨如何彻底解决这一问题,包括自动判断文档编码类型以及进行转码操作...
在本程序中,我们使用 Java 语言的 BufferedReader 类来读取 TXT 文件中的数据。 3. Oracle 数据库:Oracle 数据库是一种关系数据库管理系统,广泛应用于企业软件开发、数据分析等领域。在本程序中,我们使用 Java ...