Frage

ich ein Datenpaket am Konstruktion geschickt NSStream an einen Server werden. Ich versuche, zwei Stücke von Daten mit dem einem ‚§‘ (ASCII-Code 167) zu trennen. Dies ist die Art und Weise der Server aufgebaut ist, so muss ich versuchen, innerhalb dieser Grenzen zu bleiben ...

unichar asciiChar = 167;  //yields @"§"
[self setSepString:[NSString stringWithCharacters:&asciiChar length:1]]; 

sendData=[NSString stringWithFormat:@"USER User%@Pass", sepString];

NSLog(sendData);

const uint8_t *rawString=(const uint8_t *)[sendData UTF8String];

[oStream write:rawString maxLength:[sendData length]];  

So das endgültige Ergebnis soll wie folgt aussehen .. und es tut, wenn senddata wird zuerst aufgebaut:

USER User§Pass 

jedoch, wenn es auf der Serverseite empfangen wird, sieht es wie folgt aus:

//not a direct copy and paste. The 'mystery character' may not be exact
USER UserˤPas

... die seperator Saite hat zwei in der Länge werden, und der letzte Buchstabe von dem Befehl abgeschnitten zu werden. Ich glaube, diese Ursache durch die UTF8 Konvertierung sein.

Kann jemand etwas Licht in diese für mich vergossen?

Jede Hilfe wäre sehr geschätzt werden!

War es hilfreich?

Lösung

Die richtige Codierung in UTF-8 für dieses Zeichen ist die Zwei-Byte-Sequenz 0xC2 0xA7, das ist, was Sie bekommen. ( Fileformat.info ist für dieses Material von unschätzbarem Wert.) Dies ist aus dem LATIN-1 gesetzt ist, so dass Sie fast wollen sicher nicht NSUTF8StringEncoding, um mit NSISOLatin1StringEncoding sein, um einen ein-Byte-167-Codierung zu erhalten. Schauen Sie sich NSString -dataUsingEncoding:.

Andere Tipps

Was haben Sie und was wollen Sie übertragen ist nicht wirklich ein UTF-8-String, und es ist technisch nicht us-ascii, denn das ist nur 7 Bits ist. Sie wollen eine willkürliche Anordnung von Bytes übertragen, gemäß dem Protokoll, das Sie gerade arbeiten. Die beiden Felder des Byte-Arrays, Benutzername und Passwort, können sich UTF-8-Zeichenfolgen sein, aber mit dem 167 Separator kann es kein UTF-8-String sein.

Hier sind einige Optionen, die ich sehe:

  • Erstellen Sie das uint8_t* Byte-Array mindestens zwei verschiedene NSString Objekte plus den 167 Code. Dies wird notwendig, wenn der Benutzername oder Passwort möglicherweise Nicht-ASCII-Zeichen enthalten.
  • Verwenden Sie die NSString Methode getBytes:maxLength:usedLength:encoding:options:range:remainingRange und setzen encoding NSASCIIStringEncoding. Wenn Sie dies tun, müssen Sie bestätigen, dass an anderer Stelle Benutzername und Passwort ist us-ascii nur.
  • Verwenden Sie die NSString Methode getCString. Das wurde jedoch als veraltet, weil Sie nicht die Codierung Sie angeben können.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top