Question

Par exemple: « ½ » ou ASCII DEC 189. Quand je lis les octets d'un fichier texte l'octet [] contient la valeur valide, dans ce cas 189.

Conversion aux résultats Unicode dans le caractère de remplacement Unicode 65533.

  

UnicodeEncoding.Unicode.GetString (b);

Conversion aux résultats ASCII dans 63 ou "?"

  

ASCIIEncoding.ASCII.GetString (b);

Si cela est impossible, quelle est la meilleure façon de gérer ces données? Je voudrais être en mesure d'exécuter des fonctions de chaîne comme Remplacer ().

Était-ce utile?

La solution

189 octets représente une "½" en iso-8859-1 (alias "Latin-1"), de sorte que ce qui suit est peut-être ce que vous voulez:

var e = Encoding.GetEncoding("iso-8859-1");
var s = e.GetString(new byte[] { 189 });

Toutes les chaînes et les caractères dans .NET sont UTF-16 encodée, vous devez donc utiliser un codeur / décodeur pour convertir quoi que ce soit d'autre, parfois cela est par défaut (par exemple UTF-8 pour les instances de FileStream), mais les bonnes pratiques est toujours spécifier .

Vous aurez besoin d'une forme d'implicite ou (mieux) métadonnées explicites pour vous fournir les informations dont l'encodage.

Autres conseils

Cela dépend exactement ce que l'encodage est.

Il n'y a pas une telle chose comme « ASCII 189 » - ASCII va seulement jusqu'à 127. Il y a beaucoup de codages qui a codages 8 bits en utilisant ASCII pour les 128 premières valeurs

.

peut veulent Encoding.Default (ce qui est le codage par défaut de votre système particulier), mais il est difficile de savoir à coup sûr. D'où vos données proviennent?

L'ancien PC-8 ou un ensemble de caractères étendu ASCII était autour avant IBM et Microsoft a introduit l'idée du Code pages dans le monde du PC. Cela a été ASCII étendu - en 1982. En fait, il était le seul caractère mis disponible sur PC à l'époque, jusqu'à la carte EGA vous permet de charger d'autres polices pour VRAM

.

Ce fut aussi la norme par défaut pour les terminaux ANSI, et presque tous les BBS, je composais jusqu'à dans les années 80 et début des années 90 utilisé ce jeu de caractères pour l'affichage des menus et des boîtes.

Voici le code pour transformer 8 bits ASCII étendu dans au texte Unicode. Notez le bit clé de code: le GetEncoding ( "437"). Ce utilisé Code Page 437 pour traduire le texte ASCII 8 bits à l'équivalent Unicode.

    string ASCII8ToString(byte[] ASCIIData)
    {
        var e = Encoding.GetEncoding("437");
        return e.GetString(ASCIIData);
    }

System.String[] ne peut pas stocker les caractères avec ASCII > 127 si vous essayez de travailler sur tous les caractères ASCII étendus tels que ici œ ¢ ½ ¾ est la méthode pour le convertir en leur binaire et équivalent décimal

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