Maison > Java > javaDidacticiel > Comment conserver la nomenclature lors de la lecture de fichiers UTF-8 en Java ?

Comment conserver la nomenclature lors de la lecture de fichiers UTF-8 en Java ?

Mary-Kate Olsen
Libérer: 2024-11-24 15:44:15
original
712 Les gens l'ont consulté

How to Retain the BOM When Reading UTF-8 Files in Java?

Lecture d'UTF-8 avec un marqueur de nomenclature : comprendre la sortie inattendue de la nomenclature

Lors de la lecture de fichiers codés en UTF-8 avec un ordre d'octets Mark (BOM), il est possible de rencontrer la nomenclature incluse dans la chaîne de sortie. Cela se produit parce que la nomenclature, un identifiant Unicode, est stockée sous la forme d'une séquence d'octets spécifique au début du fichier.

Dans le code Java donné, FileReader et BufferedReader sont utilisés de manière appropriée pour gérer la lecture de fichiers UTF-8. . Cependant, le problème se pose dans la ligne suivante :

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

Cette ligne tente de décoder les octets stockés dans la chaîne tmp en utilisant le jeu de caractères UTF-8. Cependant, la méthode getBytes() sur une chaîne ne conserve pas le marqueur BOM du fichier d'origine. En conséquence, le processus de décodage ignore la nomenclature et celle-ci est effectivement perdue.

Pour conserver le marqueur BOM dans la chaîne de sortie, un léger ajustement du code est nécessaire :

byte[] bytes = tmp.getBytes("UTF-8");
if (isUTF8WithBOM(bytes)) {
    text = new String(bytes, 3, bytes.length - 3);
} else {
    text = new String(bytes, "UTF-8");
}
Copier après la connexion

La méthode isUTF8WithBOM vérifie si le tableau d'octets commence par la séquence UTF-8 BOM (0xEF, 0xBB, 0xBF). Si c'est vrai, la nomenclature est supprimée en découpant le tableau d'octets pour commencer à partir du troisième octet. Cela garantit que le processus de décodage ultérieur inclut le marqueur BOM dans la chaîne de sortie.

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