Codificare greșită C #

Am intrat în unele Probleme când încerc să fac asta:

public byte[] Login()
    {
        return Encoding.ASCII.GetBytes("WA\x01\x00\x00\x19\xf8\x05\x01\xa0\x8a\x84\xfc\x11iPhone-2.6.7-5222\x00\x08\xf8\x02\x96\xf8\x01\xf8\x01\x7e\x00\x07\xf8\x05\x0f\x5a\x2a\xbd\xa7");
    }

acești octeți \ x8a \ x84 primesc ambele codificate la \ xbf \ xbf ceea ce nu vreau. Am incercat deja cu Encoding Implicit, UTF si Unicode, dar toate nu ofera ceea ce am nevoie.

Acesta este un client socket.

0

2 răspunsuri

dar toți nu oferă ceea ce am nevoie

Ei bine, nu avem nicio idee despre ce ai nevoie de do .

Dacă încercați să obțineți valorile byte 0x8a și 0x84 , atunci vă sugerăm să evitați să utilizați textul pentru început - nu pare a fi într-adevăr toate datele de text în primul rând. Se pare că există probabil biți de text în cadrul acesteia și ați putea folosi o codificare pentru acele aspecte, dar în caz contrar atunci când doriți date fixe binare , trebuie să specificați că octeți, mai degrabă decât decodificarea "textului" care nu este cu adevărat text.

Este posibil că folosind Encoding.GetEncoding (28591) (ISO-8859-1) veți obține ceea ce ați așteptat , dar este încă nu ceea ce ar trebui să faceți ar trebui .

0
adăugat
@Moritz: Dar asta nu e cel mai bun mod de a face asta, așa cum am spus mai devreme. În mod esențial, încercați să reprezentați Unicode U + 008A (de exemplu, "caracterul de control" al setului de tabelări) - încercați să reprezentați octetul 0x8a. Deci, nu puneți-l în text pentru a începe cu.
adăugat autor Jon Skeet, sursa
"WA \ x01 \ x00 \ x00 \ X19 \ xf8 \ X05 \ x01 \ xa0 \ x8a \ X84 \ XFC \ x11iPhone-2 & zwnj;. 6.7-5,222 \ x00 \ X08 \ xf8 & zwnj; \ X02 \ X96 \ xf8 \ x01 \ xf8 & zwnj; \ x01 \ x7e \ x00 \ x07 \ xf8 & zwnj; \ x05 \ x0f \ x5a \ x2a \ xbd & zwnj; \ xa7 "
adăugat autor Moritz, sursa
Encoding.GetEncoding (28591) .GetBytes a lovit-o. Mulțumiri!
adăugat autor Moritz, sursa

ASCII nu este definit mai sus de valoarea 127.

Mă întreb de ce folosiți un intermediar de șir pentru a converti octeți în octeți.

Ați putea, în schimb, să faceți așa ceva și să eliminați această problemă cu totul.

Encoding.ASCII.GetBytes("WA")
.Concat(new byte[] { 1, 2, 3, 4, 5 })
.Concat(Encoding.ASCII.GetBytes("iPhone-2.6.7-5222"))
.Concat(new byte[] { 6, 7, 8, 9, 10 })
.ToArray()
0
adăugat
"Am încercat deja cu Encoding Implicit, UTF și Unicode, dar nu oferă tot ceea ce am nevoie."
adăugat autor Jon Skeet, sursa
Mulțumesc lui Jon. Nu a văzut asta.
adăugat autor Squirrelsama, sursa