一、认识字符编码:

1、Java中String的默认编码为UTF-8,可以使用以下语句获取:Charset.defaultCharset();

2、Windows操作系统下,文本文件的默认编码为ANSI,对中文Windows来说即为GBK。例如我们使用记事本程序新建一个文本文档,其默认字符编码即为ANSI。

3、Text文本文档有四种编码选项:ANSI、Unicode(含Unicode Big Endian和Unicode Little Endian)、UTF-8、UTF-16

4、因此我们读取txt文件可能有时候并不知道其编码格式,所以需要用程序动态判断获取txt文件编码。

ANSI :无格式定义,对中文操作系统为GBK或GB2312

UTF-8 :前三个字节为:0xE59B9E(UTF-8)、0xEFBBBF(UTF-8含BOM)

UTF-16 :前两字节为:0xFEFF

Unicode:前两个字节为:0xFFFE

例如:Unicode文档以0xFFFE开头,用程序取出前几个字节并进行判断即可。

5、Java编码与Text文本编码对应关系:

Java读取Text文件,如果编码格式不匹配,就会出现乱码现象。所以读取文本文件的时候需要设置正确字符编码。Text文档编码格式都是写在文件头的,在程序中需要先解析文件的编码格式,获得编码格式后,再以此格式读取文件就不会产生乱码了。

免费在线视频教程推荐:java学习

二、举个例子:

有一个文本文件:test.txt

测试代码:/**

* 文件名:CharsetCodeTest.java

* 功能描述:文件字符编码测试

*/

import java.io.*;

public class CharsetCodeTest {

public static void main(String[] args) throws Exception {

String filePath = "test.txt";

String content = readTxt(filePath);

System.out.println(content);

}

public static String readTxt(String path) {

StringBuilder content = new StringBuilder("");

try {

String fileCharsetName = getFileCharsetName(path);

System.out.println("文件的编码格式为:"+fileCharsetName);

InputStream is = new FileInputStream(path);

InputStreamReader isr = new InputStreamReader(is, fileCharsetName);

BufferedReader br = new BufferedReader(isr);

String str = "";

boolean isFirst = true;

while (null != (str = br.readLine())) {

if (!isFirst)

content.append(System.lineSeparator());

//System.getProperty("line.separator");

else

isFirst = false;

content.append(str);

}

br.close();

} catch (Exception e) {

e.printStackTrace();

System.err.println("读取文件:" + path + "失败!");

}

return content.toString();

}

public static String getFileCharsetName(String fileName) throws IOException {

InputStream inputStream = new FileInputStream(fileName);

byte[] head = new byte[3];

inputStream.read(head);

String charsetName = "GBK";//或GB2312,即ANSI

if (head[0] == -1 && head[1] == -2 ) //0xFFFE

charsetName = "UTF-16";

else if (head[0] == -2 && head[1] == -1 ) //0xFEFF

charsetName = "Unicode";//包含两种编码格式:UCS2-Big-Endian和UCS2-Little-Endian

else if(head[0]==-27 && head[1]==-101 && head[2] ==-98)

charsetName = "UTF-8"; //UTF-8(不含BOM)

else if(head[0]==-17 && head[1]==-69 && head[2] ==-65)

charsetName = "UTF-8"; //UTF-8-BOM

inputStream.close();

//System.out.println(code);

return charsetName;

}

}

运行结果:

相关文章教程推荐:java入门学习

获取文件编码格式 java_java实现获取文本文件的字符编码相关推荐

  1. java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...

    我们经常会遇到读取文件内容的情况,就需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况. 根据文件扩展名判定不太准确,可能会遇到未知扩展名或被修改了扩展名,下面的测试类使用文件 ...

  2. java获取文件编码_java如何获取文件编码格式

    1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...

  3. pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件

    pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件 目录

  4. java获取文件列表,[javaSE] java获取文件列表

    递归测试 import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis ...

  5. python获取文件的大小_python获取文件大小

    python获取文件大小# !/usr/bin/python3.4 # -*- coding: utf-8 -*- import os # 字节bytes转化kb\m\g def formatSize ...

  6. php获取文件真实后缀,php获取文件后缀的9种方法(收藏) - strrpos

    ...理,会用到 strstr,strrchr,strpos,strrpos,substr 等函数,在这里整理记录下.strstrstring strstr ( string $haystack , ...

  7. java获取文件夹 路径,Java获取文件的路径

    本文记录的是如何获取资源文件的路径. 先看看我设置的文件目录结构,如下图所示: ___ Java Build Path的设置如下图所示, 主要看build project之后的文件输出目录: ___ ...

  8. restfull服务器端获取文件,使用 FileREST API (获取文件服务) - Azure 文件存储 | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 获取文件服务属性 06 ...

  9. python获取文件路径名_python文件名获取文件路径

    如何使用Python获取文件所在目录和文件名 python中如何根据文件名找他的路径.现在我遍历到怎么才能将某一个文件对应的路径找到呢? 遍历用os.walk: import osfrom os.pa ...

最新文章

  1. go语言练习:幂、函授接收和返回参数、转义字符、变量和常量
  2. java 虚引用 作用_Java的强引用、弱引用、软引用和虚引用,以及用途
  3. 现实生活中常用的动态路由OSPF(单区)
  4. Office Web App2013 在线查看PDF文件
  5. 1775. [国家集训队2010]小Z的袜子
  6. javaMail发送邮件设置发件人中文昵称
  7. (附源码)小程序 口腔诊所预约系统 毕业设计 201738
  8. Java程序员每天的工作都是做什么的?
  9. 现在唯一可以得到卡巴斯基激活码的地方
  10. html行内样式选择器怎么写,巧用CSS伪类选择器实现九种样式的九宫格
  11. 2018电大计算机操作题怎么评分,2018年度电大专科计算机应用基础学习知识win7系统上机操作技巧题操作技巧.doc...
  12. Python经典例题:跑马灯文字效应
  13. TOTP动态密码认证功能,让天下无贼!
  14. 头牌知产介绍粽子商标属于哪一类?
  15. esp8266的TCP通信基础教程(结合手机APP)
  16. linux下 部署调用SAP接口
  17. windows 和 Linux 查看IP属性(ipconfig,ifconfig)
  18. 【批处理DOS-CMD命令-汇总和小结】-跳转、循环、条件命令(goto、errorlevel、if、for[读取、切分、提取字符串]、)cmd命令错误汇总,cmd错误
  19. Vue过滤器-filter
  20. 公交线路客流预测——手把手教你玩数据(一)

热门文章

  1. 2022最全的软件测试面试题及答案,不给答案的面试题都是耍流氓
  2. 增长黑客电子书pdf樊灯推荐
  3. win10电脑上安装microsoft office 2007提示0x80070543
  4. python自动下载论文_python自动下载高品质无损歌曲
  5. oracle 存笔记3 (查询修改表空间)
  6. 《我不是药神》与AI研制新药
  7. 右手螺旋判断磁感应强度方向_由电流方向判断磁感应强度
  8. bzoj1017 [JSOI2008]魔兽地图DotR
  9. winform控件之BindingNavigator
  10. 2、【KV260开发】yolov4模型训练、量化、编译、部署