Heim  >  Artikel  >  Java  >  Wie vermeide ich die Ausgabe der Stücklistenmarkierung beim Lesen einer UTF-8-codierten Datei?

Wie vermeide ich die Ausgabe der Stücklistenmarkierung beim Lesen einer UTF-8-codierten Datei?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-16 22:43:03255Durchsuche

How to Avoid Outputting the BOM Marker When Reading a UTF-8 Encoded File?

Unicode BOM und FileReader

Beim Lesen einer UTF-8-codierten Datei mit einer Byte Order Mark (BOM) kann das Problem auftreten des Stücklistenmarkers, der zusammen mit dem Dateiinhalt ausgegeben wird. Dies liegt daran, dass Unicode eine Stückliste definiert, um die Endianness des codierten Texts anzugeben, die bei unsachgemäßer Handhabung als Zeichenfolge interpretiert werden kann.

In Ihrem Code-Snippet:

  • fr und br werden verwendet, um die Datei als Bytes zu lesen und in Zeichen umzuwandeln.
  • tmp liest jede Zeile der Datei als Byte-Array.
  • text konvertiert das Byte-Array in ein UTF-8 codierte Zeichenfolge.
  • Inhalt verkettet die Zeilen der Datei, einschließlich der Stücklistenmarkierung, da diese Teil des Dateiinhalts ist.

Um zu vermeiden, dass die Stücklistenmarkierung in die Ausgabe einbezogen wird :

  1. Lesen Sie die Datei als String, nicht als Byte-Array. Dadurch entfällt die Notwendigkeit, Bytes in Zeichen umzuwandeln, und das Stücklistenproblem wird vermieden.
String content = new String(Files.readAllBytes(Paths.get(file)), "UTF-8"));
  1. Wenn Sie die Datei als Byte-Array lesen müssen, können Sie die Stücklistenmarkierung vor der Konvertierung manuell entfernen es zu einer Zeichenfolge. Die Stücklistenmarkierung ist eine Drei-Byte-Sequenz:
if (tmp.length >= 3 &&
    tmp[0] == (byte) 0xEF &&
    tmp[1] == (byte) 0xBB &&
    tmp[2] == (byte) 0xBF) {

    // Remove the BOM marker
    tmp = Arrays.copyOfRange(tmp, 3, tmp.length);
}

Das obige ist der detaillierte Inhalt vonWie vermeide ich die Ausgabe der Stücklistenmarkierung beim Lesen einer UTF-8-codierten Datei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn