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"); }
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);
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 }
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!