<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    http://blog.163.com/wf_shunqiziran/blog/static/176307209201258102217810/

    private String getFilecharset(File sourceFile) {
            
    byte[] first3Bytes = new byte[3];
            
    try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFile))) {
                bis.mark(
    0);
                
    int read = bis.read(first3Bytes, 03);
                
    if (read == -1) {
                    
    return "GBK"// 文件編碼為 ANSI
                }
                
                
    if (first3Bytes[0== (byte0xFF && first3Bytes[1== (byte0xFE) {
                    
    return "UTF-16LE"// 文件編碼為 Unicode
                }
                
                
    if (first3Bytes[0== (byte0xFE && first3Bytes[1== (byte0xFF) {
                    
    return "UTF-16BE"// 文件編碼為 Unicode big endian
                }
                
                
    if (first3Bytes[0== (byte0xEF && first3Bytes[1== (byte0xBB && first3Bytes[2== (byte0xBF) {
                    
    return "UTF-8"// 文件編碼為 UTF-8
                }
                
                bis.reset();
                
                
    while ((read = bis.read()) != -1) {
                    
    if (read >= 0xF0) {
                        
    break;
                    }
                    
    if (0x80 <= read && read <= 0xBF) {
                        
    break;
                    }
                    
    if (0xC0 <= read && read <= 0xDF) {
                        read 
    = bis.read();
                        
    if (0x80 <= read && read <= 0xBF) {
                            
    // (0x80 - 0xBF),也可能在GB編碼內(nèi)
                            continue;
                        }
                        
                        
    break;
                    } 
    else if (0xE0 <= read && read <= 0xEF) {// 也有可能出錯,但是幾率較小
                        read = bis.read();
                        
    if (0x80 <= read && read <= 0xBF) {
                            read 
    = bis.read();
                            
    if (0x80 <= read && read <= 0xBF) {
                                
    return "UTF-8";
                            }
                            
    break;
                        }
                        
    break;
                    }
                }
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
            
    return "GBK";
        }





    最近java讀取文件的時候,經(jīng)常碰到中文亂碼,特研究了一下java 的編碼格式,在java 中
    java編碼與txt編碼對應(yīng)
    java txt
    unicode unicode big endian
    utf-8 utf-8
    utf-16 unicode
    gb2312 ANSI
    java 讀取txt如果編碼格式不對就會出現(xiàn)亂碼格式,通過下邊方法獲取文本文件編碼格式,然后以指定的編碼讀取文件,就不會出現(xiàn)亂碼(簡單測試了一下,但是也不保證100%)
    private static String getFilecharset(File sourceFile) {
    String charset = "GBK";
    byte[] first3Bytes = new byte[3];
    try {
    boolean checked = false;
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFile));
    bis.mark(0);
    int read = bis.read(first3Bytes, 0, 3);
    if (read == -1) {
    return charset; //文件編碼為 ANSI
    } else if (first3Bytes[0] == (byte) 0xFF
    && first3Bytes[1] == (byte) 0xFE) {
    charset = "UTF-16LE"; //文件編碼為 Unicode
    checked = true;
    } else if (first3Bytes[0] == (byte) 0xFE
    && first3Bytes[1] == (byte) 0xFF) {
    charset = "UTF-16BE"; //文件編碼為 Unicode big endian
    checked = true;
    } else if (first3Bytes[0] == (byte) 0xEF
    && first3Bytes[1] == (byte) 0xBB
    && first3Bytes[2] == (byte) 0xBF) {
    charset = "UTF-8"; //文件編碼為 UTF-8
    checked = true;
    }
    bis.reset();
    if (!checked) {
    int loc = 0;
    while ((read = bis.read()) != -1) {
    loc++;
    if (read >= 0xF0)
    break;
    if (0x80 <= read && read <= 0xBF) // 單獨(dú)出現(xiàn)BF以下的,也算是GBK
    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;
    }
    }
    }
    bis.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return charset;
    }
    posted on 2015-05-07 15:48 SIMONE 閱讀(1515) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 成全视频免费高清 | 国产亚洲精品免费| 美女被艹免费视频| a毛片全部免费播放| 182tv免费观看在线视频| 成人午夜视频免费| 亚洲中文字幕AV每天更新| 免费福利在线观看| 6080午夜一级毛片免费看| 久久久久亚洲AV无码永不| 亚洲天堂2016| 国产人成网在线播放VA免费| 最近2022中文字幕免费视频 | 热re99久久6国产精品免费| 日韩激情淫片免费看| 国产成人亚洲综合色影视| 亚洲熟妇无码AV不卡在线播放 | 免费国内精品久久久久影院| 亚洲AV无码久久精品狠狠爱浪潮| 亚洲精品无码成人| 99精品一区二区免费视频| 亚洲乱码无限2021芒果| 99视频在线观看免费| 久久久久亚洲精品无码蜜桃 | 又粗又大又猛又爽免费视频| 一级特级女人18毛片免费视频| 精品久久久久久久久免费影院| 亚洲精品成人网久久久久久| 亚洲精品制服丝袜四区| 小说区亚洲自拍另类| 毛片大全免费观看| 亚洲精品国产情侣av在线| 好男人资源在线WWW免费| 吃奶摸下高潮60分钟免费视频| 一级做a毛片免费视频| 亚洲综合日韩中文字幕v在线| 成人免费视频77777| 亚洲成a人片在线观看中文app| 久久成人免费电影| 中文亚洲AV片不卡在线观看| 色屁屁www影院免费观看视频|