<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編碼內
                            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讀取文件的時候,經常碰到中文亂碼,特研究了一下java 的編碼格式,在java 中
    java編碼與txt編碼對應
    java txt
    unicode unicode big endian
    utf-8 utf-8
    utf-16 unicode
    gb2312 ANSI
    java 讀取txt如果編碼格式不對就會出現亂碼格式,通過下邊方法獲取文本文件編碼格式,然后以指定的編碼讀取文件,就不會出現亂碼(簡單測試了一下,但是也不保證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) // 單獨出現BF以下的,也算是GBK
    break;
    if (0xC0 <= read && read <= 0xDF) {
    read = bis.read();
    if (0x80 <= read && read <= 0xBF) // 雙字節 (0xC0 - 0xDF)
    // (0x80
    // - 0xBF),也可能在GB編碼內
    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 閱讀(1511) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 中文字幕无码日韩专区免费| 亚洲国产成a人v在线| AAA日本高清在线播放免费观看| 亚洲av日韩av高潮潮喷无码| 在人线av无码免费高潮喷水| 日本一区二区在线免费观看| 亚洲情a成黄在线观看动漫尤物| 性色av无码免费一区二区三区| 一边摸一边桶一边脱免费视频| 亚洲大片在线观看| 国产成人免费a在线视频app| 在线观看免费视频一区| 亚洲一级毛片免费看| 亚洲中文字幕视频国产| 欧美男同gv免费网站观看 | 亚洲大片在线观看| 日本特黄特色免费大片| 中国亚洲呦女专区| 亚洲国产高清精品线久久| 亚洲人成在线免费观看| 一级毛片免费毛片毛片| 亚洲国产精品白丝在线观看| 久久久久噜噜噜亚洲熟女综合| 国产精品69白浆在线观看免费 | 国产成人久久AV免费| 麻豆一区二区三区蜜桃免费| 亚洲人成网网址在线看| 亚洲国产精品久久久天堂| 免费看国产一级片| 拍拍拍又黄又爽无挡视频免费| 成人黄网站片免费视频| 一级毛片一级毛片免费毛片 | 国产精品1024在线永久免费 | 久久精品免费大片国产大片 | 亚洲国产精品成人AV在线| 亚洲视频一区在线| 国产v亚洲v天堂无码网站| 亚洲国产精品无码久久久久久曰| 中文字幕无码不卡免费视频| 日韩电影免费观看| a级毛片在线免费观看|