11
votes

Y a-t-il une différence entre utf8encoding.utf8.getbytes et encoding.utf8.getBytes?

Aujourd'hui j'ai vu un code dans lequel utf8encoding.utf8.getbytes et encoding.utf8.getbytes est utilisé. Y a-t-il une différence entre eux?


0 commentaires

4 Réponses :


12
votes

Aucune différence du tout.

coding.utf8 < em> est utf8encoding .

de msdn ( encoding.utf8 ):

Cette propriété renvoie un objet UTF8ENCODING

au lieu de utf8encoding.utf8.getbytes Vous pouvez simplement appeler utf8encoding.getbytes . .


2 commentaires

Accordé, la documentation à l'époque (.NET Framework 4) ne l'a pas mentionné, mais la documentation actuelle (.NET Framework 4.5) indique qu'il est équivalent à Nouveau UTF8coding (True) , qui émettra une bombe.


De plus, la réponse de Jonhanna semble mieux adresser la question actuelle: si utf8encoding.utf8 est différent de coding.utf8 .



3
votes

Ce ne sont que de deux manières différentes d'accéder à la classe utf8encoding et appelez son membre statique getbytes .


0 commentaires

6
votes

UTF8Coding hérite de sa propriété statique UTF8 à partir de codage, de sorte qu'ils sont en fait la même propriété.


5 commentaires

Je suppose que quelque chose s'est mal passé dans la conception de ces classes. La possibilité d'appeler utf8encoding.ascii semble impair.


@Stijn pas terriblement. Pour une chose, pourquoi voudriez-vous? (Pourquoi voudriez-vous même avoir la peine d'appeler utf8encoding.utf8 à ce sujet?), Pour un autre, "SAVOIR DES SUPPORTS DESCODINGS" tombe sous le rôle conceptuel d'un codage spécifique, afin de pouvoir dû à "ici "À" Là "n'est pas terrible.


Bien sûr, vous ne feriez pas cela, mais cela crée une confusion pour les consommateurs des classes. Le codage est déjà un sujet complexe, donc IMHO, ayant à lire de manière approfondie la documentation et d'autres ressources sur Internet pour vous assurer que ma compréhension est correcte est une indication d'une conception non optimale.


@Sstijn Eh bien d'abord, vous devriez être utilisé à l'idée que les membres statiques sont hérités et, d'autre part, la conception est telle que vous devez généralement étudier la documentation pour coding comme seuls les membres UTF8Encoding n'a que ni hériter ni remplacer ne sont les constructeurs. On pourrait faire un cas pour ne pas exposer le type utf8encoding du tout et disposer de toutes les variantes que le constructeur offre des offres de constructeur via des méthodes statiques de codage retournant codage et l'implantation étant cachée.


C'est juste un simple héritage. Une sous-classe conserve la statique publique de la superclasse. Je ne pense pas qu'il y ait quelque chose que vous peut faire à ce sujet.



10
votes

Il y a au moins une différence. Encoding.UtF8 écrira BOM tandis que UTF8coding ne sera pas (par défaut). Consultez ceci:

using System;
using System.Text;

class UTF8EncodingExample {
    public static void Main() {
        UTF8Encoding utf8 = new UTF8Encoding();
        UTF8Encoding utf8EmitBOM = new UTF8Encoding(true);

        Console.WriteLine("utf8 preamble:");
        ShowArray(utf8.GetPreamble());

        Console.WriteLine("utf8EmitBOM:");
        ShowArray(utf8EmitBOM.GetPreamble());

        Console.WriteLine("Encoding.UTF8 preamble:");
        ShowArray(Encoding.UTF8.GetPreamble());
   }

    public static void ShowArray(Array theArray) {
        foreach (Object o in theArray) {
            Console.Write("[{0}]", o);
        }
        Console.WriteLine();
    }
}


1 commentaires

Je savais qu'ils étaient différents à cet égard, ne pouvaient tout simplement pas rappeler ce qui écrirait la naissance. Merci!