首頁 > Java > Java基礎 > 主體

java實作獲取文字檔案的字元編碼

王林
發布: 2019-12-23 11:49:49
轉載
12141 人瀏覽過

java實作獲取文字檔案的字元編碼

一、認識字元編碼:

1、Java中String的預設編碼為UTF-8,可以使用以下語句取得:Charset.defaultCharset( );

2、Windows作業系統下,文字檔案的預設編碼為ANSI,對中文Windows來說即為GBK。例如我們使用記事本程式新建一個文字文檔,其預設字元編碼即為ANSI。

3、Text文本文件有四種編碼選項:ANSI、Unicode(含Unicode Big Endian和Unicode Little Endian)、UTF-8、UTF-16

4、因此我們讀取txt檔案可能有時候不知道其編碼格式,所以需要用程式動態判斷取得txt檔案編碼。

ANSI     :無格式定義,對中文作業系統為GBK或GB2312

UTF-8   :前三個位元組為:0xE59B9E(UTF-8)、0xEFBBBF(UTF-8含BOM)

UTF-16 :前兩個位元組為:0xFEFF

#Unicode:前兩個位元組為:0xFFFE

例如:Unicode文件以0xFFFE開頭,用程式取出前幾個位元組並進行判斷即可。

5、Java編碼與Text文字編碼對應關係:

java實作獲取文字檔案的字元編碼

#Java讀取Text文件,如果編碼格式不匹配,就會出現亂碼現象。所以讀取文字檔案的時候需要設定正確字元編碼。 Text文檔編碼格式都是寫在文件頭的,在程式中需要先解析文件的編碼格式,取得編碼格式後,再以此格式讀取檔就不會產生亂碼了。

免費線上影片教學推薦:java學習

二、舉例:

有一個文字檔:test.txt

java實作獲取文字檔案的字元編碼

##測試程式碼:

/**
 * 文件名:CharsetCodeTest.java
 * 功能描述:文件字符编码测试
 */
 
import java.io.*;
 
public class CharsetCodeTest {
    public static void main(String[] args) throws Exception {
        String filePath = "test.txt";
        String content = readTxt(filePath);
        System.out.println(content);
    }
 
 
public static String readTxt(String path) {
        StringBuilder content = new StringBuilder("");
        try {
            String fileCharsetName = getFileCharsetName(path);
            System.out.println("文件的编码格式为:"+fileCharsetName);
 
            InputStream is = new FileInputStream(path);
            InputStreamReader isr = new InputStreamReader(is, fileCharsetName);
            BufferedReader br = new BufferedReader(isr);
 
            String str = "";
            boolean isFirst = true;
            while (null != (str = br.readLine())) {
                if (!isFirst)
                    content.append(System.lineSeparator());
                    //System.getProperty("line.separator");
                else
                    isFirst = false;
                content.append(str);
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("读取文件:" + path + "失败!");
        }
        return content.toString();
    }
 
 
    public static String getFileCharsetName(String fileName) throws IOException {
        InputStream inputStream = new FileInputStream(fileName);
        byte[] head = new byte[3];
        inputStream.read(head);
 
        String charsetName = "GBK";//或GB2312,即ANSI
        if (head[0] == -1 && head[1] == -2 ) //0xFFFE
            charsetName = "UTF-16";
        else if (head[0] == -2 && head[1] == -1 ) //0xFEFF
            charsetName = "Unicode";//包含两种编码格式:UCS2-Big-Endian和UCS2-Little-Endian
        else if(head[0]==-27 && head[1]==-101 && head[2] ==-98)
            charsetName = "UTF-8"; //UTF-8(不含BOM)
        else if(head[0]==-17 && head[1]==-69 && head[2] ==-65)
            charsetName = "UTF-8"; //UTF-8-BOM
 
        inputStream.close();
 
        //System.out.println(code);
        return charsetName;
    }
}
登入後複製

執行結果:

java實作獲取文字檔案的字元編碼

相關文章教學建議: java入門學習

以上是java實作獲取文字檔案的字元編碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板