ToB企服应用市场:ToB评测及商务社交产业平台

标题: java如何获取一个文本文件的编码(格式)信息呢? [打印本页]

作者: 北冰洋以北    时间: 2022-9-21 22:36
标题: java如何获取一个文本文件的编码(格式)信息呢?
转自:http://www.java265.com/JavaJingYan/202110/16350332691561.html
 
文本文件是我们在windows平台下常用的一种文件格式,
这种格式会随着操作系统的语言不同,而出现其默认的编码不同
那么如何使用程序获取“文本文件”的编码方式呢?
文件编码的格式决定了文件可存储的字符类型,所以得到文件的类型至关重要
 
下文笔者讲述获取一个文本文件的格式信息的方法分享,如下所示:
  1. <strong>实现思路:
  2.     通过获取文件流的前3个字节
  3.         判断其值的方式,即可获取文本文件的编码方式
  4. </strong>
复制代码
例:
[code]package com.java265.other;import java.io.File;import java.io.FileInputStream;import java.io.InputStream; public class Test {    /*     * java265.com 获取文本文件的编码方式     *       **/         public static void main(String[] args)   {      File file = new File("E://person/java265.com/java.txt");      System.out.println(GetEncoding(file));      }                public static String GetEncoding(File file)    {        String charset = "GBK";        byte[] first3Bytes = new byte[3];        try {            boolean checked = false;             InputStream is = new FileInputStream(file);            int read = is.read(first3Bytes, 0, 3);             if (read == -1)                return charset;            if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {                charset = "UTF-16LE";                checked = true;            } else if (first3Bytes[0] == (byte) 0xFE                    && first3Bytes[1] == (byte) 0xFF) {                charset = "UTF-16BE";                checked = true;            } else if (first3Bytes[0] == (byte) 0xEF                    && first3Bytes[1] == (byte) 0xBB                    && first3Bytes[2] == (byte) 0xBF) {                charset = "UTF-8";                checked = true;            }else if (first3Bytes[0] == (byte) 0xA                    && first3Bytes[1] == (byte) 0x5B                    && first3Bytes[2] == (byte) 0x30) {                charset = "UTF-8";                checked = true;            }else if (first3Bytes[0] == (byte) 0xD                    && first3Bytes[1] == (byte) 0xA                    && first3Bytes[2] == (byte) 0x5B) {                charset = "GBK";                checked = true;            }else if (first3Bytes[0] == (byte) 0x5B                    && first3Bytes[1] == (byte) 0x54                    && first3Bytes[2] == (byte) 0x49) {                charset = "windows-1251";                checked = true;            }            //bis.reset();            InputStream istmp = new FileInputStream(file);            if (!checked) {                int loc = 0;                while ((read = istmp.read()) != -1) {                    loc++;                    if (read >= 0xF0)                        break;                    if (0x80




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4