2016-07-31 3 views
1

Ich versuche, ein Symbol mit ASCII-Code 255 (Telnet IAC) in einen String einzufügen, aber wenn ich die Daten zurück in utf8 umwandle, bekomme ich ein anderes Symbol:Einfügen von ASCII-Symbolen in einen String (Swift)

var s = "\u{ff}" 
print(s.utf8.count) // 2 
try! s.write(toFile: "output.txt", atomically: true, encoding: .utf8) 

Die Datei enthält C3 BF, nicht FF. Ich habe auch versucht,

var s = "\(Character(UnicodeScalar(255)))" 

zu verwenden, aber dies ergab das gleiche Ergebnis. Wie man es richtig entkommt?

+0

@LeoDabus Könnten Sie geben ein Beispiel? "\ u {0xff}" wird nicht kompiliert. – Zmey

+0

@LeoDabus 'var s =" \ u {255} "' erzeugt auch 'C3 BF' in der utf8-Ansicht. – Zmey

Antwort

3

ASCII definiert 128 Zeichen von 0x00 bis 0x7F. 0xFF (255) ist nicht enthalten.

In Unicode steht U + 00FF (in Swift, "\ u {ff}") für "ÿ" (LATEIN KLEINER BUCHSTABE MIT DIARESE). Und seine UTF-8-Darstellung ist 0xC3 0xBF. Siehe UTF-8, Zeichen mit Codepunkten von U + 0080 bis U + 07FF werden mit einer Zwei-Byte-Sequenz dargestellt. Außerdem müssen Sie wissen, dass 0xFF kein gültiges Byte in der UTF-8-Bytefolge ist, was bedeutet, dass Sie keine 0xFF-Bytes in der UTF-8-Textdatei erhalten können.

Wenn Sie ausgeben möchten "\ u {ff}" als Single-Byte 0xFF, verwenden Sie ISO-8859-1 (auch bekannt als ISO-Latin-1) statt:

try! s.write(toFile: "output.txt", atomically: true, encoding: .isoLatin1)