Maison >Java >javaDidacticiel >Comment conserver la nomenclature lors de la lecture de fichiers UTF-8 en 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");
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"); }
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!