2016-06-27 14 views
1

Auf einem String, ich utf8 und count zu bekommen die Anzahl der Bytes, die die String mit UTF-8-Codierung erforderlich verwenden können, um codieren:Holen Sie sich das UTF-8-Kodierung eines Zeichens in Bytes

"a".utf8.count // 1 
"チャオ".utf8.count // 9 
"チ".utf8.count // 3 

jedoch Ich sehe keine gleichwertige Methode für einen einzelnen Character Wert. Um die Anzahl der Bytes zu erhalten benötigt, um ein Zeichen in der Zeichenfolge in UTF-8 zu kodieren, konnte ich durch die Zeichenfolge von Zeichen durchlaufen, konvertieren Sie die Zeichen in einen String, und erhalten die utf8.count dieser String:

"チャオ".characters.forEach({print(String($0).utf8.count)}) // 3, 3, 3 

Dies erscheint unnötig ausführlich. Gibt es eine Möglichkeit, die UTF-8-Kodierung eines Character in Swift zu bekommen?

+0

Warum 'unterschätzenCount'? 'let c =" チ ャ オ ".utf8.count" gibt die genaue UTF-8 Länge eines Strings an. –

+0

@MartinR guter Punkt, ich werde stattdessen 'count' verwenden. Aber was ist mit der Größe auf einer Charakter-für-Buchstabe Basis? – JAL

+1

Soweit ich weiß, ist die Umwandlung in einen String der einzige Weg. –

Antwort

3

Character hat keinen direkten (öffentlichen) Zugriff auf seine UTF-8-Darstellung.

Es gibt einige internen Methoden in Character.swift mit dem UTF-8-Bytes zu tun, aber die Öffentlichkeit Sachen in String.UTF8View in StringUTF8.swift umgesetzt.

Daher String(myChar).utf8.count ist der richtige Weg, die Länge der Zeichen UTF-8 Darstellung zu erhalten.