Maison  >  Article  >  Java  >  Comment éviter de sortir le marqueur de nomenclature lors de la lecture d'un fichier codé en UTF-8 ?

Comment éviter de sortir le marqueur de nomenclature lors de la lecture d'un fichier codé en UTF-8 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 22:43:03255parcourir

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

Nom d'ordre Unicode et FileReader

Lors de la lecture d'un fichier codé en UTF-8 avec une marque d'ordre d'octet (BOM), vous pouvez rencontrer le problème du marqueur de nomenclature étant sorti avec le contenu du fichier. Cela se produit car Unicode définit une nomenclature pour spécifier le caractère boutien du texte codé, qui peut être interprété comme une séquence de caractères s'il n'est pas géré correctement.

Dans votre extrait de code :

  • fr et br sont utilisés pour lire le fichier sous forme d'octets et les convertir en caractères.
  • tmp lit chaque ligne du fichier sous forme de tableau d'octets.
  • text convertit le tableau d'octets en UTF-8 chaîne encodée.
  • le contenu concatène les lignes du fichier, y compris le marqueur de nomenclature car il fait partie du contenu du fichier.

Pour éviter que le marqueur de nomenclature soit inclus dans la sortie :

  1. Lire le fichier sous forme de chaîne, pas sous forme de tableau d'octets. Cela évite d'avoir à convertir les octets en caractères, évitant ainsi le problème de nomenclature.
String content = new String(Files.readAllBytes(Paths.get(file)), "UTF-8"));
  1. Si vous devez lire le fichier sous forme de tableau d'octets, vous pouvez supprimer manuellement le marqueur de nomenclature avant la conversion. à une chaîne. Le marqueur BOM est une séquence de trois octets :
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);
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn