Heim >Java >JavaBase >Java implementiert das Abrufen der Zeichenkodierung einer Textdatei

Java implementiert das Abrufen der Zeichenkodierung einer Textdatei

王林
王林nach vorne
2019-12-23 11:49:4912210Durchsuche

Java implementiert das Abrufen der Zeichenkodierung einer Textdatei

1. Zeichenkodierung verstehen:

1. Die Standardkodierung von String in Java ist UTF-8, die mit der folgenden Anweisung abgerufen werden kann: Charset.defaultCharset();

2. Unter dem Windows-Betriebssystem ist die Standardkodierung von Textdateien ANSI, was GBK für chinesisches Windows ist. Wenn wir beispielsweise das Notepad-Programm verwenden, um ein neues Textdokument zu erstellen, ist die Standardzeichenkodierung ANSI.

3. Textdokumente haben vier Kodierungsoptionen: ANSI, Unicode (einschließlich Unicode Big Endian und Unicode Little Endian), UTF-8, UTF-16

4 Manchmal ist das Codierungsformat möglicherweise nicht bekannt. Daher müssen Sie ein Programm verwenden, um die Codierung der TXT-Datei dynamisch zu bestimmen.

ANSI: Keine Formatdefinition, für chinesische Betriebssysteme ist es GBK oder GB2312

UTF-8: Die ersten drei Bytes sind: 0xE59B9E (UTF-8), 0xEFBBBF (UTF-8 enthalten). BOM)

UTF-16: Die ersten beiden Bytes sind: 0xFEFF

Unicode: Die ersten beiden Bytes sind: 0xFFFE

Zum Beispiel: Unicode-Dokumente beginnen mit 0xFFFE, verwenden Sie Das Programm entnimmt lediglich die ersten paar Bytes und trifft ein Urteil.

5. Entsprechung zwischen Java-Kodierung und Textkodierung:

Java implementiert das Abrufen der Zeichenkodierung einer Textdatei

Wenn das Kodierungsformat nicht übereinstimmt, werden verstümmelte Zeichen angezeigt. Daher müssen Sie beim Lesen von Textdateien die richtige Zeichenkodierung einstellen. Das Codierungsformat von Textdokumenten wird in den Dateiheader geschrieben. Nachdem Sie das Codierungsformat erhalten haben, werden durch das Lesen der Datei verstümmelte Zeichen vermieden.

Empfohlene kostenlose Online-Video-Tutorials: Java-Lernen

2. Zum Beispiel:

hat eine Textdatei: test.txt

Java implementiert das Abrufen der Zeichenkodierung einer Textdatei

Testcode:

/**
 * 文件名: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;
    }
}

Laufendes Ergebnis:

Java implementiert das Abrufen der Zeichenkodierung einer Textdatei

Empfohlene verwandte Artikel und Tutorials: Erste Schritte mit Java

Das obige ist der detaillierte Inhalt vonJava implementiert das Abrufen der Zeichenkodierung einer Textdatei. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen