Maison > Java > javaDidacticiel > Comment gérer les marqueurs de nomenclature lors de la lecture de fichiers UTF-8 ?

Comment gérer les marqueurs de nomenclature lors de la lecture de fichiers UTF-8 ?

Mary-Kate Olsen
Libérer: 2024-11-26 10:59:12
original
868 Les gens l'ont consulté

How to Handle BOM Markers in UTF-8 File Reading?

Gestion des marqueurs de nomenclature lors de la lecture de fichiers UTF-8

Lors du traitement de fichiers texte codés en UTF-8 pouvant contenir une marque d'ordre d'octet ( BOM), il est crucial de gérer correctement la nomenclature pour éviter des sorties inattendues. Une nomenclature est une séquence spéciale d'octets qui indique l'ordre des octets du fichier. En UTF-8, la BOM est la séquence de trois octets EF BB BF.

Considérez le code suivant :

fr = new FileReader(file);
br = new BufferedReader(fr);
String tmp = null;
while ((tmp = br.readLine()) != null) {
    String text;    
    text = new String(tmp.getBytes(), "UTF-8");
    content += text + System.getProperty("line.separator");
}
Copier après la connexion

Dans ce code, la BOM sera incluse dans la chaîne de sortie text car la méthode getBytes() récupère les octets bruts de la chaîne, y compris la nomenclature. Pour gérer correctement la nomenclature, vous pouvez utiliser les techniques suivantes :

Méthode 1 : spécifiez le jeu de caractères de la nomenclature

Vous pouvez spécifier le jeu de caractères comme UTF-8 avec BOM utilisant la classe Charset :

Charset charset = Charset.forName("UTF-8");
String text = new String(tmp.getBytes(charset), charset);
Copier après la connexion

Méthode 2 : lire et supprimer le BOM

Si la nomenclature n'est pas requise, vous pouvez la lire et la supprimer avant de traiter le reste du fichier :

char[] bom = new char[3];
int bytesRead = br.read(bom, 0, bom.length);
if (bytesRead == bom.length && new String(bom).equals("\uFEFF")) {
    // BOM exists, drop it
}
Copier après la connexion

En mettant en œuvre l'une de ces techniques, vous pouvez vous assurer que la nomenclature est gérée correctement et que la chaîne de sortie n'inclut pas le marqueur de nomenclature.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal