J'ai implémenté des traitements liés aux opérations de fichiers en entreprise, mais à partir d'un fichier UTF-8 (avec BOM) Maintenant que vous avez appris à supprimer la nomenclature, je vais le résumer pour l'avenir.
Tout d'abord, qui est BOM en premier lieu?
En gros avec BOM ** Une marque au début d'un fichier créé avec un code de caractère Unicode **. En UTF-8, il est représenté par 3 octets de ** 0xEF 0xBB 0xBF **. La nomenclature n'est généralement pas visible dans les blocs-notes, mais elle se trouve en fait au début du contenu du fichier Il est livré avec une nomenclature, et lorsqu'il est lu par l'ordinateur, il est interprété et exécuté de cette manière. Et il a deux rôles principaux en tant que point de repère.
Lors de l'association avec des caractères avec un code de caractère de 2 octets ou plus tel que UTF-16 et UTF-32 La nomenclature est utilisée pour spécifier l'ordre des fins. Cependant, lors de l'association avec un code de caractère à 1 octet comme UTF-8, Vous n'êtes pas obligé de spécifier un endian. Alors, pourquoi UTF-8 (avec BOM) existe-t-il?
Après enquête, j'ai constaté que la cause était la spécification lorsque Excel ouvre CSV. Quand Excel ouvre CSV, il essaie de s'ouvrir avec Shift-JIS, donc avec UTF-8 sans BOM Lorsque j'essaye de lire le fichier écrit, les caractères sont déformés. Pour éviter cela, même lorsque vous ouvrez CSV avec BOM, utilisez le code de caractère Unicode Vous devez spécifier pour le lire.
Maintenant, je vais vous expliquer comment supprimer la nomenclature qui est le sujet principal. Java ne suppose pas que UTF-8 a une nomenclature en premier lieu. Par conséquent, lors de la lecture d'un fichier avec BOM, BOM doit être utilisé comme un autre caractère. Traitez-le comme similaire et ne supprimez pas la nomenclature. Par conséquent, si vous souhaitez supprimer la nomenclature, vous devez implémenter un tel processus séparément.
Java
//Affichage du code Unicode de la nomenclature
public static final String BOM = "\uFEFF";
/**
*Si le fichier contenait une nomenclature
*Convertir sans nomenclature.
*
* @chaîne de fichier param s
* @Chaîne de fichier sans nomenclature de retour
*
*/
private static String removeUTF8BOM(String s) {
if (s.startsWith(BOM)) {
//Lire la chaîne de caractères après le début du fichier
s = s.substring(1);
}
return s;
}
Une autre méthode consiste à utiliser la bibliothèque de classes fournie par apache. Voir ci-dessous pour les spécifications détaillées.
Classe de lecture de fichiers avec BOM
Pour supprimer la nomenclature à l'aide de Java Comment gérer UTF-8 (avec BOM)
Recommended Posts