Aujourd'hui j'ai vu un code dans lequel utf8encoding.utf8.getbytes code> et
encoding.utf8.getbytes code> est utilisé. Y a-t-il une différence entre eux? P>
4 Réponses :
Aucune différence du tout. p>
de msdn ( Cette propriété renvoie un objet UTF8ENCODING P>
blockQuote>
au lieu de coding.utf8 code>
< em> est em> utf8encoding code>. p>
encoding.utf8 code>): p>
utf8encoding.utf8.getbytes code> Vous pouvez simplement appeler
utf8encoding.getbytes code>. p>.
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) Code>, qui émettra une bombe.
De plus, la réponse de Jonhanna semble mieux adresser la question actuelle: si utf8encoding.utf8 code> est différent de
coding.utf8 code>.
Ce ne sont que de deux manières différentes d'accéder à la classe code> utf8encoding code> et appelez son membre statique getbytes code>. p>
UTF8Coding hérite de sa propriété statique UTF8 à partir de codage, de sorte qu'ils sont en fait la même propriété. P>
Je suppose que quelque chose s'est mal passé dans la conception de ces classes. La possibilité d'appeler utf8encoding.ascii code> semble impair.
@Stijn pas terriblement. Pour une chose, pourquoi voudriez-vous? (Pourquoi voudriez-vous même avoir la peine d'appeler utf8encoding.utf8 code> à 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 code> coding code> comme seuls les membres UTF8Encoding code> n'a que ni hériter ni remplacer ne sont les constructeurs. On pourrait faire un cas pour ne pas exposer le type
utf8encoding code> du tout et disposer de toutes les variantes que le constructeur offre des offres de constructeur via des méthodes statiques de
codage code> retournant
codage code > 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 i> faire à ce sujet.
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(); } }
Je savais qu'ils étaient différents à cet égard, ne pouvaient tout simplement pas rappeler ce qui écrirait la naissance. Merci!