Question

Je regarde les constructeurs pour StreamReader / Writer et je note qu'il utilise UTF8 par défaut. Quelqu'un sait pourquoi il en est? J'aurais présumé qu'il aurait été un pari plus sûr par défaut Unicode.

Était-ce utile?

La solution

UTF-8 fonctionnera avec tout document ASCII, et est généralement plus compact que UTF-16 - mais il couvre encore l'ensemble de l'Unicode. Je dirais que UTF-8 est far plus commun que UTF-16. Il est également la valeur par défaut pour XML (quand il n'y a pas de nomenclature et aucun codage explicite spécifié).

Pourquoi pensez-vous qu'il serait préférable par défaut UTF-16? (C'est ce que est Encoding.Unicode.)

EDIT: Je suppose que vous êtes confus au sujet exactement ce qui peut gérer UTF-8. Cette page décrit assez clairement, y compris la façon tout caractère Unicode particulier est codé. Il est un codage de largeur variable, mais elle couvre l'ensemble de l'Unicode.

Autres conseils

UTF8 est Unicode, plus spécifiquement l'un des types de codage Unicode.

Plus important encore son arrière compatible avec ASCII, plus il est le standard par défaut pour XML et HTML

« Unicode » est le nom d'une norme, donc il n'y a pas de codage « Unicode ». Au contraire, il existe deux méthodes de cartographie: UTF et UCS .

En ce qui concerne "pourquoi" partie, UTF-8 a une compatibilité maximale avec ASCII.

Comme tous les autres déjà dit, UTF-8 est une norme de codage au sein Unicode. UTF-8 utilise un nombre variable d'octets pour encoder tous les caractères unicode il y a.

Tous les caractères ASCII sont représentés en l'état, de sorte que les fichiers ASCII peuvent être lus avec plus tarder maintenant. Dès qu'un octet dans le flux a son 8 bit (bit le plus élevé,> 127) ensemble, ce qui déclenche le lecteur à combiner avec l'octet suivant jusqu'à ce que soit <128. La combinaison est alors considérée comme 1 caractère.

Il y a des caractères en LATIN-1 (ANSII), qui sont codés en utilisant deux caractères par exemple: E est codée en tant que e et '. Longueur ( 'é') est donc 2.

Windows utilise UTF-16 en interne, ce qui limite les caractères codables à 64K, qui est en aucun cas tous les caractères Unicde. UTF-32 pour l'instant permet de tous les caractères, mais est artificiellement limité aussi. Et tous deux ne sont pas compatibles vers le haut en ASCII, comme les zéros ont principaux:

A = ASCII h41 = UTF-8 h41 = UTF-16 h0041 = UTF-32 h00000041

Il y a aussi petits et grands encodages endian:

A = UTF-16 big endian h0041 = UTF-16 little endian h4100

Imaginez que vous utilisez UTF16 ou UTF32 pour enregistrer vos fichiers. Ils (pour les fichiers texte) double ou quadrouple taille par rapport à ASCII et UTF-8 (UTF-8 si les caractères ascii seulement sont utilisés). UTF-8 permet non seulement de tous les caractères de la norme unicode, même pour des améliorations futures, mais permet d'économiser l'espace, il efficace ainsi.

En général, les deux premiers octets d'un fichier, la nomenclature ou Byte Order Marker, vous dire quelle est la norme de codage est utilisé. En cas d'omission, XML et StreamRedaer utilisent UTF-8, comme vous avez découvert. Ce nouveau fait SENCE sous forme de fichiers ASCII ne disposent pas d'une nomenclature et donc dans la plupart des cas sont lus correctement. Cela pourrait ne pas être vrai pour les fichiers en utilisant tous LATIN-1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top