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
- Définition de la valeur par défaut dans la structure de l’entité – Base de données en premier
- L’entité ou le type complexe… ne peut pas être construit dans une requête LINQ to Entities
- Tableau avec des indices négatifs
- supprimer les lignes RichTextBox tout en conservant la couleur des lignes restantes en C #
- ArgumentNullException dans Json.NET 6.0.7 lors de la désérialisation dans NameValueCollection
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.