Une chose étrange dans c # Encodage

Je convertis un byte array en ssortingng et je convertis cette ssortingng en byte array . ces tableaux à deux octets sont différents.

Comme ci-dessous:

 byte[] tmp = Encoding.ASCII.GetBytes(Encoding.ASCII.GetSsortingng(b)); 

Supposons que b est un tableau d’octets.

b [0] = 3, b [1] = 188, b [2] = 2 // système décimal

Résultat:

tmp [0] = 3, tmp [1] = 63, tmp [2] = 2

C’est donc mon problème, qu’est-ce qui ne va pas?

ASCII est uniquement sur 7 bits, les autres sont donc invalides. Par défaut, il utilise ? pour remplacer tous les octets non valides et c’est pourquoi vous obtenez un ? .

Pour les jeux de caractères 8 bits, vous devez rechercher soit le code ASCII étendu (défini ultérieurement par “ISO 8859-1”), soit la page de codes 437 (qui est souvent confondue avec le code ASCII étendu, mais ce n’est pas le cas).

Vous pouvez utiliser le code suivant:

 Encoding enc = Encoding.GetEncoding("iso-8859-1"); // For CP437, use Encoding.GetEncoding(437) byte[] tmp = enc.GetBytes(enc.GetSsortingng(b)); 

188 est hors de scope pour ASCII. Les caractères qui ne sont pas dans le jeu de caractères correspondant sont transposés en ‘?’ à dessein (préférez-vous la transposition en “1/4”?)

Le caractère 188 n’est pas défini pour ASCII. Au lieu de cela, vous obtenez 63 , ce qui est un point d’interrogation.

Le jeu de caractères ASCII est compris entre 1 et 127. Vous pouvez voir que 188 n’est pas dans cette plage et est converti en? (= ASC 63).

188 n’est pas dans la plage d’ASCII (7 bits), vous devriez utiliser Encoding.Default pour obtenir le codage ANSI:

 byte[] b = new byte[3]{ 3, 188, 2 }; byte[] tmp = Encoding.Default.GetBytes(Encoding.Default.GetSsortingng(b)); 

Chaque séquence d’octets n’est pas nécessairement une séquence valide de valeurs codées pour un codage particulier.

Ainsi, le résultat de Encoding.ASCII.GetSsortingng(b) sur un tableau d’octets arbitraire , b , est mal défini. (Et pourrait être, pour tout autre encodage également).

Si vous devez prendre un tableau d’octets arbitraire et obtenir une séquence de caractères, vous pouvez consulter les classes de ToBase64Ssortingng et FromBase64Ssortingng . Si ce n’est pas ce que vous essayez de faire, expliquez peut-être le problème initial.