java獲取一個(gè)文本文件的編碼(格式)信息
前言:
文本文件是我們?cè)趙indows平臺(tái)下常用的一種文件格式,
這種格式會(huì)隨著操作系統(tǒng)的語言不同,而出現(xiàn)其默認(rèn)的編碼不同
那么如何使用程序獲取“文本文件”的編碼方式呢?
文件編碼的格式?jīng)Q定了文件可存儲(chǔ)的字符類型,所以得到文件的類型至關(guān)重要
下文筆者講述獲取一個(gè)文本文件的格式信息的方法分享,如下所示:
現(xiàn)思路:
- 通過獲取文件流的前3個(gè)字節(jié)
- 判斷其值的方式,即可獲取文本文件的編碼方式
例:
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 <= read && read <= 0xBF) break; if (0xC0 <= read && read <= 0xDF) { read = istmp.read(); if (0x80 <= read && read <= 0xBF) continue; else break; } else if (0xE0 <= read && read <= 0xEF) { read = istmp.read(); if (0x80 <= read && read <= 0xBF) { read = istmp.read(); if (0x80 <= read && read <= 0xBF) { charset = "UTF-8"; break; } else break; } else break; } } } is.close(); istmp.close(); } catch (Exception e) { e.printStackTrace(); } return charset; } }
到此這篇關(guān)于java獲取一個(gè)文本文件的編碼(格式)信息的文章就介紹到這了,更多相關(guān)java獲取文本編碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis直接執(zhí)行SQL的工具SqlMapper
今天小編就為大家分享一篇關(guān)于MyBatis直接執(zhí)行SQL的工具SqlMapper,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12Java Runnable線程傳參,實(shí)現(xiàn)讓run訪問參數(shù)
這篇文章主要介紹了Java Runnable線程傳參,實(shí)現(xiàn)讓run訪問參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java規(guī)則引擎easy-rules詳細(xì)介紹
本文主要介紹了Java規(guī)則引擎easy-rules詳細(xì)介紹,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Spring Boot前后端分離開發(fā)模式中的跨域問題及解決方法
本文介紹了解決Spring Boot前端Vue跨域問題的實(shí)戰(zhàn)經(jīng)驗(yàn),并提供了后端和前端的配置示例,通過配置后端和前端,我們可以輕松解決跨域問題,實(shí)現(xiàn)正常的前后端交互,需要的朋友可以參考下2023-09-09解決springboot配置logback-spring.xml不起作用問題
這篇文章主要介紹了解決springboot配置logback-spring.xml不起作用問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11springboot數(shù)據(jù)庫密碼加密的配置方法
這篇文章主要給大家介紹了關(guān)于springboot數(shù)據(jù)庫密碼加密的配置方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04(starters)springboot-starter整合阿里云datahub方式
這篇文章主要介紹了(starters)springboot-starter整合阿里云datahub方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11