uio--WebPageMain-Module

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ärts­kompatibel 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


    UI ORGANIZED.

    UIO3 Es ist einfacher als Du denkst.

    Stelle noch heute Deine Anfrage.

    uio--WebPageFooter-Module