[JAVA] Comment supprimer une nomenclature (UTF-8)

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.

Qu'est-ce que BOM en premier lieu?

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.

  1. Pour montrer qu'il est écrit en code de caractère Unicode
  2. Pour spécifier l'ordre des bits appelés endian en UTF-16 et UTF-32. Selon l'ordre de disposition ・ Big Endian (organiser dans l'ordre à partir de l'octet le plus élevé) ・ Little Indian (rangé dans l'ordre à partir de l'octet le plus bas) Il existe deux types

Pourquoi UTF-8 (avec BOM) existe-t-il?

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.

Comment supprimer la nomenclature

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

Article de référence

Pour supprimer la nomenclature à l'aide de Java Comment gérer UTF-8 (avec BOM)

Recommended Posts

Comment supprimer une nomenclature (UTF-8)
[Débutant] Comment supprimer AUCUN FICHIER
Comment ajouter la fonction de suppression
Comment supprimer des données avec une clé externe
Comment compter rapidement les points de code UTF-8
Comment supprimer un contrôleur, etc. à l'aide d'une commande
[Pour les débutants] Comment implémenter la fonction de suppression
Comment effacer la base de données lors de la recréation de l'application
Rails "Comment supprimer les fichiers de migration NO FILE"
Comment développer OpenSPIFe
Comment appeler AmazonSQSAsync
Comment utiliser Map
Comment écrire des rails
Comment utiliser rbenv
Comment utiliser with_option
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser la carte
Comment utiliser collection_select
Comment utiliser Twitter4J
Comment utiliser active_hash! !!
Comment installer Docker
Comment utiliser MapStruct
Comment utiliser TreeSet
Comment désinstaller Rails
Comment installer docker-machine
[Comment utiliser l'étiquette]
Comment faire un pot ombré
Comment écrire docker-compose
Comment utiliser l'identité
Comment utiliser le hachage
Comment écrire Mockito
Comment créer docker-compose
Comment installer MySQL
Comment écrire un fichier de migration
Comment construire android-midi-lib
Comment utiliser Dozer.mapper
Comment utiliser Gradle
Comment utiliser org.immutables
Comment utiliser java.util.stream.Collector
Comment utiliser VisualVM
Comment utiliser Map
Comment repousser la barre oblique \
Comment concaténer des chaînes
Comment supprimer / mettre à jour le champ de liste de OneToMany
Comment supprimer un objet new_record construit avec Rails
Comment supprimer des éléments d'adaptateur personnalisés à l'aide d'un modèle personnalisé
Comment supprimer des images non balisées en masse avec Docker
[rails] Comment publier des images