欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java讀取文件字符集示例方法

 更新時(shí)間:2014年02月24日 09:39:55   作者:  
這篇文章主要介紹了java讀取文件字符集的示例,需要的朋友可以參考下

復(fù)制代碼 代碼如下:

public static String getCharset(File file) {
        String charset = "GBK";
        byte[] first3Bytes = new byte[3];
        try {
            boolean checked = false;
            BufferedInputStream bis = new BufferedInputStream(
                  new FileInputStream(file));
            bis.mark(0);
            int read = bis.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;
            }
            bis.reset();
            if (!checked) {
                int loc = 0;
                while ((read = bis.read()) != -1) {
                    loc++;
                    if (read >= 0xF0)
                        break;
                    //單獨(dú)出現(xiàn)BF以下的,也算是GBK
                    if (0x80 <= read && read <= 0xBF)
                        break;
                    if (0xC0 <= read && read <= 0xDF) {
                        read = bis.read();
                        if (0x80 <= read && read <= 0xBF)// 雙字節(jié) (0xC0 - 0xDF)
                            // (0x80 -
                            // 0xBF),也可能在GB編碼內(nèi)
                            continue;
                        else
                            break;
                     // 也有可能出錯,但是幾率較小
                    } else if (0xE0 <= read && read <= 0xEF) {
                        read = bis.read();
                        if (0x80 <= read && read <= 0xBF) {
                            read = bis.read();
                            if (0x80 <= read && read <= 0xBF) {
                                charset = "UTF-8";
                                break;
                            } else
                                break;
                        } else
                            break;
                    }
                }
                System.out.println(loc + " " + Integer.toHexString(read));
            }
            bis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return charset;
    }

相關(guān)文章

  • Java不借助第三變量實(shí)現(xiàn)兩數(shù)交換的示例

    Java不借助第三變量實(shí)現(xiàn)兩數(shù)交換的示例

    本文主要介紹了Java不借助第三變量實(shí)現(xiàn)兩數(shù)交換的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用Feign擴(kuò)展包實(shí)現(xiàn)微服務(wù)間文件上傳

    使用Feign擴(kuò)展包實(shí)現(xiàn)微服務(wù)間文件上傳

    這篇文章主要為大家詳細(xì)介紹了使用Feign擴(kuò)展包實(shí)現(xiàn)微服務(wù)間文件上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • SpringBoot實(shí)現(xiàn)動態(tài)定時(shí)任務(wù)的示例代碼

    SpringBoot實(shí)現(xiàn)動態(tài)定時(shí)任務(wù)的示例代碼

    在SpringBoot項(xiàng)目中簡單使用定時(shí)任務(wù),不過由于要借助cron表達(dá)式且都提前定義好放在配置文件里,不能在項(xiàng)目運(yùn)行中動態(tài)修改任務(wù)執(zhí)行時(shí)間,實(shí)在不太靈活。現(xiàn)在我們就來實(shí)現(xiàn)可以動態(tài)修改cron表達(dá)式的定時(shí)任務(wù),感興趣的可以了解一下
    2022-10-10
  • JavaScript中new運(yùn)算符的實(shí)現(xiàn)過程解析

    JavaScript中new運(yùn)算符的實(shí)現(xiàn)過程解析

    這篇文章主要介紹了JavaScript中new運(yùn)算符的實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 在Java中使用基本的正則表達(dá)式

    在Java中使用基本的正則表達(dá)式

    這篇文章主要介紹了在Java中使用基本的正則表達(dá)式,本文通過簡要的案例,說明了很多場景下的正則表達(dá)式的用法,列出了正則表達(dá)式匹配規(guī)則的表格,需要的朋友可以參考下
    2021-07-07
  • Java ThreadLocal用法實(shí)例詳解

    Java ThreadLocal用法實(shí)例詳解

    這篇文章主要介紹了Java ThreadLocal用法,結(jié)合實(shí)例形式詳細(xì)分析了ThreadLocal線程局部變量相關(guān)原理、定義與使用方法,需要的朋友可以參考下
    2019-09-09
  • Java ArrayList如何實(shí)現(xiàn)生成不重復(fù)隨機(jī)數(shù)

    Java ArrayList如何實(shí)現(xiàn)生成不重復(fù)隨機(jī)數(shù)

    這篇文章主要介紹了Java ArrayList如何實(shí)現(xiàn)生成不重復(fù)隨機(jī)數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java中的main方法調(diào)用非靜態(tài)方法處理

    Java中的main方法調(diào)用非靜態(tài)方法處理

    這篇文章主要介紹了Java中的main方法調(diào)用非靜態(tài)方法處理,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java 中InputStream,String,File之間的相互轉(zhuǎn)化對比

    java 中InputStream,String,File之間的相互轉(zhuǎn)化對比

    這篇文章主要介紹了java 中InputStream,String,File之間的相互轉(zhuǎn)化對比的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 深入理解Java之jvm啟動流程

    深入理解Java之jvm啟動流程

    這篇文章主要介紹了深入理解Java之jvm啟動流程,文章內(nèi)容講解的很清晰,有對這方面感興趣的同學(xué)可以研究下
    2021-02-02

最新評論