<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)航:
     
    主站蜘蛛池模板: 亚洲三级中文字幕| 亚洲国产成人精品久久| 伊人婷婷综合缴情亚洲五月| 亚洲中文字幕久久精品无码APP| 看全免费的一级毛片| 男人进去女人爽免费视频国产 | 亚洲中文字幕久久精品无码APP| 疯狂做受xxxx高潮视频免费| 亚洲A∨午夜成人片精品网站| 久久精品亚洲中文字幕无码网站 | GOGOGO免费观看国语| 2020久久精品国产免费| 亚洲国产精品日韩专区AV| 亚洲精品成人图区| 特级毛片在线大全免费播放| 91精品免费久久久久久久久| 国产精品亚洲精品日韩已方| 亚洲第一区二区快射影院| 国偷自产一区二区免费视频| 日本久久久免费高清| 亚洲第一成年网站大全亚洲| 中文字幕影片免费在线观看| 亚洲A∨无码一区二区三区| 偷自拍亚洲视频在线观看| 亚洲精品国产V片在线观看 | 日本媚薬痉挛在线观看免费| 污视频网站在线观看免费| 无人影院手机版在线观看免费| 亚洲欧洲日产国码久在线| 日韩插啊免费视频在线观看 | 久久久久亚洲AV片无码| 在线观看的免费网站| 成年免费a级毛片| 精品亚洲成a人片在线观看| 国产乱子伦精品免费视频| 亚洲美女中文字幕| 18禁男女爽爽爽午夜网站免费| 久久91亚洲精品中文字幕| 在线观看免费毛片| 亚洲男人天堂2022| 亚洲区小说区图片区QVOD|