获取文件编码格式 java_java实现获取文本文件的字符编码
一、认识字符编码:
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实现获取文本文件的字符编码相关推荐
- java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...
我们经常会遇到读取文件内容的情况,就需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况. 根据文件扩展名判定不太准确,可能会遇到未知扩展名或被修改了扩展名,下面的测试类使用文件 ...
- java获取文件编码_java如何获取文件编码格式
1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...
- pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件
pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件 目录
- java获取文件列表,[javaSE] java获取文件列表
递归测试 import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis ...
- python获取文件的大小_python获取文件大小
python获取文件大小# !/usr/bin/python3.4 # -*- coding: utf-8 -*- import os # 字节bytes转化kb\m\g def formatSize ...
- php获取文件真实后缀,php获取文件后缀的9种方法(收藏) - strrpos
...理,会用到 strstr,strrchr,strpos,strrpos,substr 等函数,在这里整理记录下.strstrstring strstr ( string $haystack , ...
- java获取文件夹 路径,Java获取文件的路径
本文记录的是如何获取资源文件的路径. 先看看我设置的文件目录结构,如下图所示: ___ Java Build Path的设置如下图所示, 主要看build project之后的文件输出目录: ___ ...
- restfull服务器端获取文件,使用 FileREST API (获取文件服务) - Azure 文件存储 | Microsoft Docs...
您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 获取文件服务属性 06 ...
- python获取文件路径名_python文件名获取文件路径
如何使用Python获取文件所在目录和文件名 python中如何根据文件名找他的路径.现在我遍历到怎么才能将某一个文件对应的路径找到呢? 遍历用os.walk: import osfrom os.pa ...
最新文章
- go语言练习:幂、函授接收和返回参数、转义字符、变量和常量
- java 虚引用 作用_Java的强引用、弱引用、软引用和虚引用,以及用途
- 现实生活中常用的动态路由OSPF(单区)
- Office Web App2013 在线查看PDF文件
- 1775. [国家集训队2010]小Z的袜子
- javaMail发送邮件设置发件人中文昵称
- (附源码)小程序 口腔诊所预约系统 毕业设计 201738
- Java程序员每天的工作都是做什么的?
- 现在唯一可以得到卡巴斯基激活码的地方
- html行内样式选择器怎么写,巧用CSS伪类选择器实现九种样式的九宫格
- 2018电大计算机操作题怎么评分,2018年度电大专科计算机应用基础学习知识win7系统上机操作技巧题操作技巧.doc...
- Python经典例题:跑马灯文字效应
- TOTP动态密码认证功能,让天下无贼!
- 头牌知产介绍粽子商标属于哪一类?
- esp8266的TCP通信基础教程(结合手机APP)
- linux下 部署调用SAP接口
- windows 和 Linux 查看IP属性(ipconfig,ifconfig)
- 【批处理DOS-CMD命令-汇总和小结】-跳转、循环、条件命令(goto、errorlevel、if、for[读取、切分、提取字符串]、)cmd命令错误汇总,cmd错误
- Vue过滤器-filter
- 公交线路客流预测——手把手教你玩数据(一)