Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 Hello iPhone
2 Die Reise nach iOS
3 Sehen und anfassen
4 Alles unter Kontrolle
5 Daten, Tabellen und Controller
6 Models, Layer, Animationen
7 Programmieren, aber sicher
8 Datenserialisierung und Internetzugriff
9 Multimedia
10 Jahrmarkt der Nützlichkeiten
Stichwort

Jetzt Buch bestellen
Ihre Meinung?

Spacer
Apps programmieren für iPhone und iPad von Klaus M. Rodewig, Clemens Wagner
Das umfassende Handbuch
Buch: Apps programmieren für iPhone und iPad

Apps programmieren für iPhone und iPad
Rheinwerk Computing
1172 S., geb., mit DVD
49,90 Euro, ISBN 978-3-8362-2734-6
Pfeil 8 Datenserialisierung und Internetzugriff
Pfeil 8.1 Ich packe meine Texte
Pfeil 8.1.1 Serialisierung von Zeichenketten
Pfeil 8.1.2 Zeichenkodierungen
Pfeil 8.1.3 Unicode und UTF-8
Pfeil 8.1.4 Die Zeichenkodierung erkennen
Pfeil 8.1.5 Zeichenketten konvertieren
Pfeil 8.2 JSON und die URLonauten
Pfeil 8.2.1 Das JSON-Format
Pfeil 8.2.2 Einfacher YouTube-Zugriff mit JSON
Pfeil 8.2.3 URLs erstellen
Pfeil 8.2.4 JSON-Dokumente schreiben
Pfeil 8.2.5 Verwendung des JSONKits als Parser
Pfeil 8.3 XML
Pfeil 8.3.1 XML in Kürze
Pfeil 8.3.2 Property-Listen
Pfeil 8.3.3 SAX
Pfeil 8.3.4 DOM und XPath
Pfeil 8.3.5 Der Tag der Entscheidung
Pfeil 8.4 Daten, Daten, ihr müsst wandern
Pfeil 8.4.1 Synchrone Kommunikation
Pfeil 8.4.2 Komplexe Anfragen
Pfeil 8.4.3 Auf dem Webserver nichts Neues
Pfeil 8.4.4 Asynchrone Kommunikation
Pfeil 8.4.5 Große Datenmengen der Übertragung
Pfeil 8.4.6 Passwortabfragen
Pfeil 8.4.7 Sicher kommunizieren mit TSL (SSL)
Pfeil 8.4.8 Hier geht die POST ab
Pfeil 8.4.9 Dateiupload
Pfeil 8.4.10 Überprüfung der Erreichbarkeit
Pfeil 8.5 Karten
Pfeil 8.5.1 Karten darstellen
Pfeil 8.5.2 Koordinatensysteme
Pfeil 8.5.3 Geokoordinaten bestimmen
Pfeil 8.5.4 Eigene Kartenbeschriftungen
Pfeil 8.5.5 Routen

8Datenserialisierung und InternetzugriffZur nächsten Überschrift

»Bin ich schon drin, oder was?«
– Boris Becker

Dieses Kapitel beschäftigt sich mit dem Datenzugriff über das Internet, den viele Apps benötigen, um beispielsweise bekannte Webauftritte zu adaptieren oder andere Informationen bereitzustellen. Die Möglichkeiten sind hier vielfältig – angefangen vom einfachen Datenabruf über den bidirektionalen Datenaustausch bis hin zur Umsetzung komplexer mehrstufiger Abläufe ist alles möglich.


Rheinwerk Computing - Zum Seitenanfang

8.1Ich packe meine TexteZur nächsten ÜberschriftZur vorigen Überschrift

Für den Datenaustausch mit Systemen in Internet müssen Sie nicht nur eine Internetverbindung für die Datenübertragung herstellen, sondern auch die Daten für den Austausch aufbereiten. Dazu ist ein Format notwendig, das sowohl der Client – also das iOS-Gerät – als auch der Server verstehen und das sich über eine Internetverbindung übertragen lässt. Das Prinzip der Serialisierung und Deseralisierung haben Sie in Kapitel 3, »Sehen und anfassen«, bereits kurz kennengelernt, auch wenn es dort das Speichern der Daten in einer Datei behandelt. Die folgenden Abschnitte erläutern die für den Datenaustausch notwendige Theorie.

Grundlagen

Dieser Abschnitt beschäftigt sich mit der binären Darstellung von Zeichenketten und geht dafür auf die Grundlagen ein. Zeichenkodierungen sind leider ein bisschen abstrakt, allerdings müssen Sie sich mit ihnen auskennen, um die anderen Themen dieses Kapitels zu verstehen.


Rheinwerk Computing - Zum Seitenanfang

8.1.1Serialisierung von ZeichenkettenZur nächsten ÜberschriftZur vorigen Überschrift

Die Serialisierung wandelt Objekte oder beliebige andere Daten in eine Sequenz von Zahlen um, die in einem fest vorgegebenen Wertebereich liegen. Dabei sollte die Umwandlung in die Sequenz natürlich auch wieder umkehrbar sein, so dass sich die ursprünglichen Daten wieder daraus rekonstruieren – also deserialisieren – lassen. Da die kleinste adressierbare Speichereinheit auf den meisten Computern, so auch auf dem iPhone, ein Byte ist, umfasst dieser Wertebereich in der Regel die Zahlen -128 bis 127 bei vorzeichenbehafteter Darstellung beziehungsweise 0 bis 255 bei vorzeichenloser Darstellung. Diese Sequenzen nennt man auch Bytesequenzen.

Sehr einfach lassen sich Zeichenketten serialisieren, wenn man jedem Zeichen eine feste Zahl zuordnet. Diese Zuordnungen heißen Zeichenkodierung, und iOS kennt mehrere davon. Die meisten basieren auf der ASCII-Kodierung, die die lateinischen Buchstaben, die arabischen Ziffern und einige Satz- und Sonderzeichen enthält. Die ASCII-Kodierung des Wortes »iPhone« lautet in vorzeichenloser Darstellung beispielsweise: 105, 80, 104, 111, 110, 101. Aus dieser Bytefolge lässt sich auch wieder problemlos das ursprüngliche Wort »iPhone« rekonstruieren.

Da die Serialisierung von Texten so einfach ist, wandeln viele Programme für die Serialisierung ihre Daten in einen Text um. Das hat neben der Einfachheit den Vorteil, dass die serialisierten Daten mit einem Texteditor lesbar sind. Dieser Vorteil ist gerade bei der Entwicklung nicht zu unterschätzen, da Sie recht einfach überprüfen können, ob Ihre App die Daten auch richtig serialisiert.

Im Gegensatz dazu lassen sich binär serialisierte Daten nicht ohne weiteres mit einem Texteditor wie Smultron oder dem integrierten Texteditor von Xcode darstellen. Mit binären Serialisierungen lassen sich die Daten dafür häufig wesentlich platzsparender unterbringen. Bekannte Beispiele für binäre Serialisierungen sind nicht nur die unterschiedlichen Audio-, Bild- und Videoformate wie beispielsweise MP3, JPEG und MPEG-4, sondern auch die Formate von Word 97 und Excel 97. Viele Anwendungen setzen hier nichtstandardisierte Eigenentwicklungen – sogenannte proprietäre Formate – ein.


Rheinwerk Computing - Zum Seitenanfang

8.1.2ZeichenkodierungenZur nächsten ÜberschriftZur vorigen Überschrift

Wie wir bereits erwähnt haben, enthält die ASCII-Kodierung unter anderem die lateinischen Zeichen – also alle Buchstaben von A bis Z in Groß- und Kleinschreibung. Ihr fehlen indes diakritische Zeichen (Umlaute und Buchstaben mit Akzenten), Ligaturen (z. B. ß), andere Sonderzeichen (z. B. €) und andere Alphabete (z. B. das griechische, kyrillische) sowie die Zeichen anderer Schriftsysteme (z. B. Chinesisch, Japanisch).

Es gibt eine Reihe weiterer Zeichenkodierungen, die auf der ASCII-Kodierung basieren. Das ist möglich, da ASCII nur die Werte von 0 bis 127 verwendet und ein Byte ja 256 Werte darstellen kann. Jeder Erweiterung von ASCII stehen also 128 freie Werte zur Verfügung.

Der Standardzeichensatz unter Mac OS 9 und OS X ist beispielsweise MacRoman, der sehr viele Sonderzeichen der westeuropäischen Sprachen enthält. Sie können das Wort »Grüße« nicht mit der ASCII-Kodierung darstellen, weil sie keine Zuordnung für das »ü« und das »ß« enthält. Die MacRoman-Kodierung dieses Wortes entspricht der Zahlenfolge 71, 114, 159, 167, 101. Darin sind die Werte für den dritten und vierten Buchstaben größer als 127 und liegen somit nicht mehr im ASCII-Bereich.

Allerdings ist diese Kodierung außerhalb des Apple-Universums nicht sehr stark verbreitet. Da viele Server nicht unter OS X, sondern unter Linux oder Windows laufen, sollten Sie lieber eine Kodierung verwenden, die diese Betriebssysteme auch unterstützen. Eine der am weitesten verbreiteten Kodierungen ist wohl ISO Latin 1, die auch utf-8 heißt. Wenn Sie das Wort »Grüße« damit kodieren, erhalten Sie die folgende Zahlensequenz: 71, 114, 252, 223, 101. Bei dieser Sequenz unterscheiden sich natürlich nur die Werte für das ü (252 statt 159) und das ß (223 statt 167) von der MacRoman-Kodierung, da alle anderen Buchstaben ja bereits in ASCII enthalten sind.

8-Bit-Zeichensätze

Kodierungen wie MacRoman oder ISO Latin 1 bezeichnet man auch als 8-Bit-Zeichensätze, weil sie für jedes Zeichen genau ein Byte verwenden und ein Byte auf heutigen Computern bekanntlich aus 8 Bits besteht. In grauer Vorzeit gab es allerdings Computer, auf denen ein Byte nur aus 7 Bit bestand. Aus dieser Zeit stammt die ASCII-Kodierung, die auch als 7-Bit-Zeichensatz bezeichnet wird, weil sie nur Werte von 0 bis 127 verwendet.

Es gibt noch eine Reihe weiterer 8-Bit-Zeichensätze, wie beispielsweise ISO Latin 5 beziehungsweise ISO-8859-9 (Türkisch), ISO-8859-7 (Griechisch) oder ISO-8859-8 (Hebräisch). 8-Bit-Zeichensätze reichen für viele Texte in der Regel aus. Wenn Sie innerhalb eines Textes hingegen die Zeichen aus unterschiedlichen Zeichensätzen brauchen, [Anm.: Dies ist z. B. der Fall, wenn Sie in einem hebräischen Text eine wörtliche Rede in Griechisch oder eine URL mit lateinischen Buchstaben einfügen.] sind jedoch auch die 8-Bit-Zeichensätze unzureichend, weil Sie unterschiedliche Zeichensätze in einem Text nicht einfach mischen können.


Rheinwerk Computing - Zum Seitenanfang

8.1.3Unicode und UTF-8Zur nächsten ÜberschriftZur vorigen Überschrift

Um dieses Problem zu beheben, gibt es auch Zeichensätze, die mehr als ein Byte pro Zeichen verwenden. Der wohl bekannteste Zeichensatz aus dieser Gruppe ist Unicode, der mittlerweile über 110.000 Zeichen umfasst, wozu beispielsweise auch die asiatischen Schriftsysteme, Emoticons und phönizische Schriftzeichen gehören. Für die Darstellung von so vielen Zeichen sind mindestens 3 Byte notwendig, und Unicode sieht sogar bis zu 4 Byte für die Kodierung [Anm.: Der Name dieser Kodierung lautet UTF-32BE.] eines Zeichens vor. Das Wort »Grüße« hat in dieser Kodierung die Form 0, 0, 0, 71, 0, 0, 0, 114, 0, 0, 0, 252, 0, 0, 0, 223, 0, 0, 0, 101, und es braucht damit den vierfachen Speicherplatz als in den Kodierungen ISO Latin 1 oder MacRoman.

Für Texte in lateinischer Schrift ist Unicode natürlich sehr verlustreich. Um möglichst viele Zeichen bei möglichst kleinem Speicherverbrauch darzustellen, [Anm.: Dies ist zumindest die Sichtweise der westlichen Welt.] wurde die Zeichenkodierung UTF-8 entwickelt. Sie verwendet eine variable Zeichenlänge von derzeit ein bis vier Byte, wobei die Ein-Byte-Codes genau der ASCII-Kodierung entsprechen. Eine ausführliche Beschreibung der UTF-8-Kodierung ist hier nicht notwendig; Sie finden jedoch auf Wikipedia unter der URL http://de.wikipedia.org/wiki/UTF-8 detailliertere Informationen.

UTF-8 liefert für das Beispielwort »Grüße« die Zahlenfolge 71, 114, 195, 188, 195, 159, 101. Sie ist zwar länger als die Zahlenfolge für ISO Latin 1 und MacRoman, hingegen wesentlich kürzer als die Unicode-Kodierung. Bei der UTF-8-Kodierung bekommen die Buchstaben »G«, »r« und »e« den gleichen Wert wie in den beiden besprochenen 8-Bit-Kodierungen, da diese Zeichen ja aus dem ASCII-Zeichensatz stammen. Für das »ü« und das »ß« verwendet UTF-8 hingegen jeweils zwei Zahlen (195, 188 beziehungsweise 195, 159).


Rheinwerk Computing - Zum Seitenanfang

8.1.4Die Zeichenkodierung erkennenZur nächsten ÜberschriftZur vorigen Überschrift

Viele iOS-Applikationen basieren auf der Abfrage von Daten von einem Server. Dabei stellt sich gerade für Anfänger häufig das Problem, die Zeichenkodierung der Serverdaten zu ermitteln. Viele Programmierer behelfen sich hier mit Raten, was sich jedoch durch ein systematisches Vorgehen vermeiden lässt.

Die einfachste Möglichkeit, die Zeichenkodierung der Serverdaten zuverlässig zu ermitteln, ist die Verwendung des Kommandozeilenprogramms file, das den Dateityp ermittelt. Angenommen, Sie haben die Daten in der Datei datei.txt gespeichert, dann gibt Ihnen der Aufruf file datei.txt den Typ dieser Datei aus. Bei Textdateien zeigt Ihnen das Programm zusätzlich die Dateikodierung an. Bei XML- oder HTML-Dateien müssen Sie zusätzlich einen zusätzlichen Parameter angeben, um die Zeichenkodierung zu erhalten: file -I datei.html. Wenn die Datei datei.html beispielsweise den Inhalt der aktuellen deutschen Homepage von Apple aufruft, erhalten Sie datei.html: text/html; charset=utf-8 als Ergebnis. Die Seite ist also UTF-8-kodiert.

Mit Hilfe des Programms file ist es also relativ einfach, die Dateikodierung herauszubekommen. Allerdings kann dieses Programm die Kodierung nur zuverlässig erkennen, wenn die Datei nicht nur ASCII-Zeichen enthält.

Dateiinhalte abfragen

Den Inhalt einer Webseite können Sie übrigens über das Kommandozeilenprogramm curl abfragen und in einer Datei speichern. Beispielsweise laden Sie über den Aufruf curl http://www.apple.com/de/ > datei.html den Inhalt der deutschen Startseite von Apple in die Datei datei.html. Wenn Sie allerdings nur die Zeichenkodierung ermitteln wollen, können Sie auch curl -I http://www.apple.de/de/ verwenden. In der Antwort finden Sie bei den meisten Webseiten eine Zeile, die mit Content-Type beginnt und die Zeichenkodierung enthält. Für die Apple-Seite ist das beispielsweise:

Content-Type: text/html; charset=UTF-8

Der Server liefert die Seiten also in UTF-8 aus. Allerdings liefert leider nicht jeder HTTP-Server diese Information.


Rheinwerk Computing - Zum Seitenanfang

8.1.5Zeichenketten konvertierenZur vorigen Überschrift

Bytesequenzen können Sie in Objekten der Klasse NSData ablegen, die Sie über die Methode dataUsingEncoding: der Klasse NSString erzeugen können. Dabei gibt der Parameter die gewünschte Kodierung an. Für den Parameter stellt Ihnen Cocoa Touch mehrere Konstanten für häufig verwendete Kodierungen zur Verfügung. Tabelle 8.1 enthält die besprochenen Zeichenkodierungen mit den dazugehörenden Konstantennamen.

Tabelle 8.1 Zeichenkodierungen und die zugehörigen Konstanten

Kodierung Konstante

ASCII

NSASCIIStringEncoding

UTF-8

NSUTF8StringEncoding

ISO Latin 1

NSISOLatin1StringEncoding

MacRoman

NSMacOSRomanStringEncoding

UTF-32BE

NSUTF32BigEndianStringEncoding

Sie können also über den Aufruf

NSData *theData = 
[theString dataUsingEncoding:NSUTF8StringEncoding];

die Zeichenkette in der Variablen theString in ihre UTF-8-Darstellung umwandeln. Es gibt außerdem den Initializer initWithData:encoding:, mit dem Sie aus einem Datenobjekt eine Zeichenkette zu einer Kodierung erzeugen. Wollen Sie beispielsweise eine UTF-8-kodierte Zeichenkette dekodieren, dann erreichen Sie das über

NSString *theString = [[NSString alloc] 
initWithData:theData encoding:NSUTF8StringEncoding];

Das Umwandeln einer Zeichenkette in eine Bytesequenz und umgekehrt ist also relativ einfach. Allerdings müssen viele Anwendungen relativ komplexe Daten übertragen, was sich jedoch auch durch die Übertragung einer Zeichenkette realisieren lässt. Dazu zwei Beispiele:

  • Wenn Sie eine Liste von Zahlen übertragen möchten, können Sie einfach die Zahlen in Zeichenketten umwandeln und durch Kommas trennen; also beispielsweise als 1,2,4,8,16,32.
  • Bei Objekten, deren Attribute einfache Daten sind, können Sie jedes Attribut und dessen Wert durch ein Gleichheitszeichen verbunden in jeweils eine Zeile schreiben, z. B. so:
    salutation=Herr
    firstName=Rudi
    lastName=Ratlos
    street=Ratzeburger Str. 3
    zip=18109
    city=Rostock

Sie können sich so natürlich weitere Formate ausdenken, die auf Ihre Anwendungsfälle passen, und sich dann dafür Parser schreiben, die solche Zeichenketten in die entsprechenden Objekte umwandeln. Das ist allerdings sehr viel Arbeit. Sie können hingegen auch ein bekanntes Format verwenden, für das es schon fertige Parser gibt.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück




Copyright © Rheinwerk Verlag GmbH, Bonn 2014
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern


  Zum Rheinwerk-Shop
Zum Katalog: Apps programmieren für iPhone und iPad






Neuauflage: Apps programmieren für iPhone und iPad
Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Einstieg in Objective-C 2.0 und Cocoa






Einstieg in Objective-C 2.0 und Cocoa


Zum Katalog: Spieleprogrammierung mit Android Studio






Spieleprogrammierung mit Android Studio


Zum Katalog: Android 5






Android 5


Zum Katalog: iPhone und iPad-Apps entwickeln






iPhone und iPad-Apps entwickeln


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo