- Overview
- Network | URL-Encoding
- Encoding | Begriffe
- Encoding | URL-Encoding
- Encoding | ASCII
- Encoding | ISO-8859-1
- Encoding | Unicode
- Encoding | Codepoint
- Encoding | UTF-8
- Encoding | UTF-16
- Encoding | UTF-32
- Encoding | URLEncoder
- Encoding | URLDecoder
- Encoding | StandardChartsets.UTF_8
- Encoding | FAQ
JAVA-C3
Network-Programming
Network Basics
Grundlagen
TCP
UDP
Datagram
IP-Adressen
Port
listen
DNS
Domain-Name
DNS
A- und AAAA-Records
CNAME-Record
Reverse-DNS / PTR-Record
TTL
Windows: DNS und Host
Windows: Firewalls und Ports
HTTPS.SYS
Nginx als Reverse-Proxy
Binding
Lokale Netzwerke und NET
URI
scheme
host
port
path/file
Query
Fragment / Anchor
(01) Hierarchischer URI
(02) Opaque URI
(03) URI mit Sonderzeichen
(04) Normalisierung von URI
(04) Normalisierung von URI
Prüfen auf Gleichheit
a.compare(b)
a.equals(b)
(05) Relative in absolute URIs übersetzen
URL Encoding/Decoding
URL-Encoding
ASCII
Unicode
Codepage
UTF-8
UTF-16
UTF-32
ISO-8859-1
UTF-32
URLDecoder
StandardChartsets.UTF_8
Blocking-I/O
Non-Blocking-I/O
network-java-sockets
@! network-java-nio FEHLT
Client-Server mit Sockets
Unabhängige Java-Programme in Kommunikation über Sockets
Client
Server
@! com.stuelken.java.c1.networking.basics.sockets Version prüfen!
@! com.stuelken.java.***.a7.e50200_clientserver_keyvalue.client KeyValueClientResilient class
@! Das müssten 3 verschiedene Beispiele/Pages sein!
@! Erfordert com.stuelken..ArgumentInterpreter!
@! Sprungmarken für Client, Server, .. ergänzen
Overview
Network | URL-Encoding
Für die Adressierung von Files im Internet oder auch das Übersenden von Formularwerten werden Zeichenfolgen in eine URL-konforme Schreibweise übersetzt oder aus dieser Schreibweise zurück in einen String des jeweiligen Charsets zurückübersetzt.
In diesem Themenblock zeigen wir, wie man das umsetzt und worauf man in Hinblick auf Zeichensätze wie UTF-8, UTF-16 und UTF-32 zu achten hat.
Syntax
Network | URL-Encoding
Um Daten in Textform zwischen verschiedenen Rechnern, Betriebssystemen, Softwarelösungen, Servern, Clients über Netzwerkverbindungen verschicken, empfangen und hierbei korrekt verarbeiten zu können, ist es zwingend erforderlich, dass man sich auf den gleichen Zeichensatz einigt.
Auch wenn man sich im Internet bei Browser-Anwendungen und Datenbanken schon lange auf UFT-8 einigt hat, muss man hierzu wissen, dass in anderen Bereichen mit ASCII, JavaScript und JSON mit UTF-8, Java intern mit UFT-16 und C# .NET intern mit UTF-32 arbeitet.
URL-Encoding und URL-Decoding
Die hierbei entstehenden String-Literale stellen sicher, dass Zeichenfolgen mit Sonderzeichen sicher über Netzwerk-Verbindungen übertragen werden können.
String raw = "Jürgen & Co";
String encoded = java.net.URLEncoder.encode(raw, StandardCharsets.UTF_8);
String decoded = java.net.URLDecoder.decode(encoded, StandardCharsets.UTF_8);
Zeichensatz von Strings
In Bezug auf den Zeichensatz UTF-8, UTF-16 und UFT-32 geht es im Kern darum, mit welcher Nummer ein Symbol/Zeichen registriert wird, damit auch eine Schrift als Unicode-Type-Font in der Lage ist, den Byte-Wert oder Codepoint dann mit dem korrekten grafischen Abbild dargestellt werden kann.
String str = "Ärger, Öffentlichkeit, Übermut, \"Hallo!\" oder 斯新媒体 师新媒体";
byte[] utf8 = str.getBytes(StandardCharsets.UTF_8);
String fromUtf8 = new String(utf8, StandardCharsets.UTF_8);
byte[] utf16 = str.getBytes(StandardCharsets.UTF_16);
String fromUtf16 = new String(utf8, StandardCharsets.UTF_16);
ISO-8859-1
Hierbei handelt es sich um den Zeichensatz lateinischer Zeichen. Das ist allerdings nicht der Unicode.
Begriffe
Encoding | Begriffe
Es gibt eine ganze Reihe von Begriffen, die man im Zusammenhang mit Zeichensätzen wissen sollte.
Begriffe
URL-Encoding
URL-Encoding ersetzt Nicht-ASCII-Zeichen
und reservierte Zeichen wie beispielsweise das Leerzeichen durch sogenannte
%-HEX-Codes. So wird beispielsweise ein
Leerzeichen in einem String hierbei durch den String %20
ersetzt.
Der Wert 20 ist hierbei eine Hexadezimalzahl
und lässt sich mit 16*2+1*0 um Rechnen in das
Dezimalsystem: 32.
Diese Nummer entspricht hier jetzt dem ASCII-Code. Bei höheren Nummern wird mit dem UTF-8 Zeichensatz des Unicode gearbeitet.
Standard für universelles Zeichenkodierungssystem
Der Unicode ist ein universelles Zeichencodierungssystem, das jedem Zeichen aus praktisch allen Schriftsystemen weltweit einen eindeutigen Zahlenwert zuweist, dem sogenannten Codepoint.
Zweck: Unicode sorgt für eine einheitliche Darstellung und Verarbeitung von Text über Plattformen, Betriebssysteme und Programme hinweg.
Unterstützung von über 140.000 Zeichen aus Sprachen, Symbolen, Emojis und historischen Schriften
Konsistente Textverarbeitung, Sortierung und Vergleich unabhängig von der Sprache
Der Unicode-Standard ist die Grundlage für Encodings wie UTF-8, UTF-16 und UTF-32.
Das Unicode Consortium ist eine offene, gemeinnützige Organisation. Es verwaltet den Standard. Mitglieder aus Industrie, Wissenschaft und Institutionen schlagen neue Zeichen vor, pflegen den Standard und sorgen damit für Konsistenz.
Unicode Transformation Format mit 8, 16 und 32 Bit
Die Abkürzung UTF-8 steht für Unicode Transformation Format – 8-bit.
Es handelt sich um eine variable Längen-Codierung für Unicode-Zeichen, dh. manche Zeichen im Zeichensatz werden durch nur 1 einziges Zeichen repräsentiert, andere Zeichen durch mehrere 8-Bit-Zeichen (entspricht 1 Byte).
1 Byte für U+0000 bis U+007F
2 Bytes für U+0080 bis U+07FF
3 Bytes für U+0800 bis U+FFFF
4 Bytes für U+10000 bis U+10FFFF
UTF-8 ist heute das dominante Zeichencodierungsschema im Web, in vielen Protokollen und modernen Betriebssystemen. Es ist abwärtskompatibel zu ASCII und ermöglicht eine effiziente Verarbeitung von Text aus nahezu allen Schriftsystemen.
Um einen String in JAVA in eine URL-kodierte Variante mit dem UFT-8 Zeichensatz konvertieren zu können, nutzt man den java.net.URLEncoder.
Für das spätere Umwandeln zurück zu einem String wird der URLDecoder verwendet.
String raw = "Jürgen & Co";
String encoded = java.net.URLEncoder.encode(raw, StandardCharsets.UTF_8);
Zurück in lesbar:
String decoded = java.net.URLDecoder.decode(encoded, StandardCharsets.UTF_8);
Transformieren von Strings in Unicode UFT-8
Um einen String in JAVA in eine URL-kodierte Variante mit dem UFT-8 Zeichensatz konvertieren zu können, nutzt man den java.net.URLEncoder.
Für das spätere Umwandeln zurück zu einem String wird der URLDecoder verwendet.
String raw = "Jürgen & Co"; String encoded = java.net.URLEncoder.encode(raw, StandardCharsets.UTF_8); Zurück in lesbar:
String decoded = java.net.URLDecoder.decode(encoded, StandardCharsets.UTF_8); Auslesen
UTF-8 kodiert Unicode-Zeichen variabel von 1 bis 4 Bytes, Rückwärtskompatibel zu ASCII.
Konvertierung in Java:
String str = "Ärger, Öffentlichkeit, Übermut, \"Hallo!\" oder 斯新媒体 师新媒体";
byte[] utf8 = str.getBytes(StandardCharsets.UTF_8);
String fromUtf8 = new String(utf8, StandardCharsets.UTF_8);
Der Standard für den Datenaustausch in Netzwerken und im Internet ist aktuell UTF-8.
Auslesen
UTF-16 nutzt 2 oder 4 Bytes pro Zeichen.
Konvertierung in Java:
String str = "Ärger, Öffentlichkeit, Übermut, \"Hallo!\" oder 斯新媒体 师新媒体";
byte[] utf16 = str.getBytes(StandardCharsets.UTF_16);
String fromUtf16 = new String(utf16, StandardCharsets.UTF_16);
Hinweis: Java-Strings sind intern UTF-16.
Zeichensatz vs. Codepage
Ein Zeichensatz (Character Set) definiert eine Menge von Zeichen (z.B. Unicode).
Eine Codepage (Encoding) ordnet jedem Zeichen eine Byte-Sequenz zu (z.B. UTF-8, ISO-8859-1).
Java Strings sind intern UTF-16 (Zeichen zu 16-Bit), externe Kommunikation meist UTF-8.
Begriffe
Es gibt rund um das Thema Zeichensatz, Zeichenformat, URLEncoding und dergleichen eine ganze Reihe von Fragen.
FAQ
URL-kodierte Formulardaten.
Wenn aus einem HTML-Formular im Internet Daten übertragen werden an einen Server, so werden diese grundsätzlich vom Browser URL-kodiert übertragen.
<html>
! Charset UFT-8
! Formular Text, Zahl, Datum, Radio, Checkbox, CheckboxMultiple, Textarea, Select/Option
! GET/POST
</html>
class Formulardaten {
public static void main(String[] args) {
! HttpServer
!
}
}
Links
Quellen, Notes, Tags
UIO3 Es ist einfacher als Du denkst.
Stelle noch heute Deine Anfrage.
