# Convertor PRO — Manual

> Vollständige Funktionsbeschreibung von Convertor PRO: jedes Encoding-Feld, jeder Daten-Format-Modus, die verwendeten Bibliotheken und alle Grenzen.

Source: https://www.jpkc.com/db/tools/convertor/manual/

Zurück zur Übersicht: [Convertor PRO](https://www.jpkc.com/db/tools/convertor/) · Tool live öffnen: [www.jpkc.com/tools/convertor/](https://www.jpkc.com/tools/convertor/)

Dieses Manual beschreibt **Convertor PRO** vollständig: beide Tabs, jedes Eingabefeld, jeden Modus, die verwendeten Bibliotheken und die Grenzen jeder Konvertierung. Die Oberfläche des Tools ist auf Englisch — Feld-, Knopf- und Optionsnamen stehen deshalb in ihrer englischen Original-Schreibweise (mit deutscher Erläuterung), damit du dich im echten Interface zurechtfindest.

Convertor PRO ist in zwei Tabs gegliedert: **Encoding** (Zeichen- und Kodierungs-Umwandlung) und **Data Formats** (Konvertierung zwischen JSON, YAML, TOML, XML und INI). Beide arbeiten vollständig im Browser.

## Tab 1: Encoding

Der Encoding-Tab nutzt die Konvertierungs-Funktionen von Richard Ishida (rishida.net, GPL). Das Grundprinzip ist wichtig zu verstehen: Es gibt eine zentrale Drehscheibe — die **echten Zeichen** — und rundherum mehrere Felder, die jeweils eine andere textuelle *Darstellung* dieser Zeichen sind.

### Bedienprinzip: Convert füllt alles

Jedes Feld hat einen eigenen **Convert**-Knopf und einen Kopier-Knopf. Wenn du in ein Feld etwas eintippst und dessen **Convert** klickst, passiert zweierlei: Der Inhalt wird zunächst **zu echten Zeichen dekodiert**, und aus diesen Zeichen werden anschließend **alle anderen Felder neu berechnet**. Tippst du also `é` ins Feld *Characters* und klickst Convert, erscheinen in den übrigen Feldern automatisch `&#xE9;`, `%C3%A9`, `é` und so weiter. Tippst du umgekehrt `&#xE9;` ins Feld *HTML/XML* und klickst dessen Convert, erscheint `é` in *Characters* und alles übrige wird ebenfalls gefüllt.

Die Umwandlung ist damit in **beide Richtungen** möglich, immer über die Zeichen als gemeinsame Mitte. Bei leerer Eingabe meldet das Tool freundlich, dass es Text braucht.

### ASCII- und Latin1-Optionen

Mehrere Felder haben zwei Checkboxen, **ASCII** und **Latin1**. Sie steuern, *welche* Zeichen überhaupt escaped werden. Mit **ASCII** (Standard bei NCRs, Unicode und 0x) bleiben ASCII-Zeichen (U+0000–U+007F) unverändert stehen und nur alles darüber wird in die jeweilige Notation umgesetzt. Mit **Latin1** bleibt zusätzlich der Latin-1-Bereich unangetastet. Ohne beide werden alle Zeichen umgesetzt. Das ist nützlich, wenn du etwa nur die „exotischen" Zeichen einer ansonsten lesbaren Zeichenkette escapen willst.

### Mixed input

Das oberste Feld, *Mixed input*, ist ein Sammelbecken: Hier darfst du **gemischte Escapes** unterschiedlicher Notationen zusammen einwerfen, und das Tool löst sie alle zu Zeichen auf. Es hat mehrere Knöpfe:

- **Convert** — löst die erkannten Escapes zu Zeichen auf.
- **Hex CP**, **Dec CP** — gibt zusätzlich die hexadezimalen bzw. dezimalen Code-Points aus.
- **UTF-8**, **UTF-16** — gibt die jeweiligen Code-Units aus.

Die Checkbox **Convert \x** schaltet die Behandlung einbuchstabiger `\x`-Escapes (Single-letter escapes) zu. Mixed input ist der Allrounder für „ich habe hier irgendeinen escapeten Salat und will den Klartext".

### HTML/XML

Feld *HTML/XML*: Numerische und **benannte** HTML-/XML-Entities. Beim Dekodieren versteht das Feld benannte Entities (`&amp;`, `&nbsp;`, `&copy;`, …) ebenso wie numerische. Beim Erzeugen aus Zeichen gibt es zwei Optionen:

- **Escape invisibles** (Standard: an) — wandelt unsichtbare Zeichen (etwa Steuerzeichen, geschützte Leerzeichen) in sichtbare Entities um, damit sie im Markup nicht spurlos verschwinden.
- **Bidi to markup** — überführt Bidi-Steuerzeichen (für rechts-nach-links-Text) in entsprechendes Markup.

### Percent encoding (URIs)

Feld *Percent encoding (URIs)*: Die `%XX`-Notation für URLs. `ü` wird zu `%C3%BC` (Prozent-kodierte UTF-8-Bytes), und umgekehrt löst das Feld eine prozentkodierte Zeichenkette wieder zu Klartext auf. Der richtige Modus, wenn du Sonderzeichen in einen URL-Pfad oder Query-String packen musst.

### Hexadecimal NCRs / Decimal NCRs

Zwei Felder für **Numeric Character References**, wie HTML sie kennt:

- *Hexadecimal NCRs* — Form `&#xHHHH;` (z. B. `&#x1F600;` für 😀).
- *Decimal NCRs* — Form `&#NNNN;` (z. B. `&#128512;`).

Beide haben die ASCII-/Latin1-Optionen. NCRs funktionieren in jedem HTML/XML-Kontext und sind die robusteste Art, ein beliebiges Zeichen in Markup zu schreiben.

### Unicode U+hex / 0x… notation

Zwei Felder für Code-Point-Schreibweisen, wie sie in Spezifikationen und Quelltext vorkommen:

- *Unicode U+hex* — die Standard-Notation `U+00E9`, `U+1F600`.
- *0x… notation* — die `0x`-Schreibweise, wie sie viele Programmiersprachen für Hex-Literale nutzen.

Beide mit ASCII-/Latin1-Optionen.

### Hex code points / Decimal code points

Die nackten Code-Point-Werte ohne Präfix:

- *Hex code points* — hexadezimale Code-Points, leerzeichengetrennt.
- *Decimal code points* — dieselben Werte dezimal.

Praktisch, wenn du Code-Points an ein Programm oder eine Tabelle weiterreichen willst, das kein bestimmtes Notations-Präfix erwartet.

### UTF-8 code units / UTF-16 code units

Die tatsächlichen **Encoding-Bytes** bzw. Code-Units:

- *UTF-8 code units* — die UTF-8-Byte-Sequenz eines Zeichens.
- *UTF-16 code units* — die UTF-16-Code-Units, inklusive Surrogate-Paaren für Zeichen jenseits der Basic Multilingual Plane.

Hier siehst du, wie ein Zeichen auf Byte-Ebene wirklich gespeichert wird — wichtig beim Debugging von Encoding-Problemen.

### JavaScript escapes / CSS escapes

Zwei Felder für die Escape-Syntax zweier konkreter Sprachen:

- *JavaScript escapes* — `\uXXXX`-Escapes für JS-Strings. Die Checkbox **C-style Supp.** schaltet die C-artige Behandlung von Zeichen der supplementären Ebenen zu.
- *CSS escapes* — die Backslash-Hex-Escapes, wie CSS sie in Selektoren und Content-Werten erlaubt.

## Tab 2: Data Formats

Der zweite Tab konvertiert zwischen **JSON, YAML, TOML, XML und INI**. Das Bedienmodell ist Quelle → Ziel: Du gibst links Daten ein, wählst rechts ein Zielformat und klickst Convert.

### Aufbau und Bedienelemente

Links der **Source**-Bereich mit einem Format-Auswahlfeld (JSON, YAML, TOML, XML, INI), rechts der **Output**-Bereich mit eigenem Format-Auswahlfeld. Beide Bereiche sind syntaxhervorhebende **ACE-Editoren** (Theme „Dracula", Zeilenumbruch an). Das Output-Feld ist schreibgeschützt.

Knöpfe im Source-Bereich:

- **Paste** — fügt aus der Zwischenablage ein und erkennt das Format automatisch.
- **Open file** — lädt eine lokale Datei (akzeptiert `.json`, `.yaml`, `.yml`, `.toml`, `.xml`, `.htm`, `.html`, `.ini`, `.cfg`, `.conf`); das Format wird aus der Endung abgeleitet, sonst per Inhaltserkennung.
- **Clear** — leert Quelle und Ausgabe.

Knöpfe im Output-Bereich: **Copy** (in die Zwischenablage) und **Save** (als Datei mit passender Endung herunterladen). Unten: **Convert** (umwandeln) und **Swap** (Ausgabe wird zur neuen Eingabe, Formate tauschen).

### Wie die Konvertierung funktioniert

Jede Konvertierung läuft in zwei Schritten über eine gemeinsame Zwischenstufe: Das Quellformat wird zu einem **JavaScript-Objekt geparst**, und dieses Objekt wird ins Zielformat **serialisiert**. Deshalb ist jede Richtung zwischen den fünf Formaten möglich — es gibt keine festen Paare, sondern fünf Parser und fünf Serializer um eine Objekt-Mitte herum.

Verwendete Bausteine:

- **JSON** — natives `JSON.parse` / `JSON.stringify` (Ausgabe mit 2 Leerzeichen Einrückung).
- **YAML** — die Bibliothek js-yaml (`load` / `dump`, Einrückung 2, ohne Anker/Referenzen).
- **TOML** — eine schlanke, mitgelieferte TOML-1.0-Implementierung (Tabellen, Array-of-Tables, Strings, Mehrzeiler, Zahlen in Dezimal/Hex/Oktal/Binär, Booleans, Datumswerte, Arrays, Inline-Tabellen).
- **XML** — der native `DOMParser` zum Lesen, ein eigener Serializer zum Schreiben.
- **INI** — eigener Parser und Serializer.

### Automatische Format-Erkennung

Beim Einfügen oder Datei-Öffnen versucht das Tool, das Quellformat selbst zu bestimmen: XML an führendem `<`, JSON an führender `{`/`[` mit gültigem Parse, INI/TOML an `[section]`-Köpfen und Kommentar- bzw. Wertmustern, YAML an `---` oder `key:`-Mustern. Das ist eine Heuristik — bei mehrdeutigen Eingaben (INI gegen TOML ähneln sich) kann sie danebenliegen; dann stellst du das Quellformat einfach von Hand korrekt ein.

### Grenzen und Sonderfälle

Weil alles über eine generische Objekt-Zwischenstufe läuft, sind einige Eigenheiten unvermeidlich — gut zu wissen, bevor du dich über eine Ausgabe wunderst:

- **Kommentare gehen verloren.** Kommentare aus YAML, TOML oder INI überleben die Konvertierung nicht, weil das Zwischenobjekt keine Kommentare kennt.
- **XML → Objekt:** Attribute landen als Schlüssel mit `@`-Präfix, gemischter Textinhalt als `#text`. Wiederholte gleichnamige Elemente werden zu einem Array. Reine Text-Elemente werden, wenn möglich, automatisch zu Zahl oder Boolean typisiert.
- **Objekt → XML:** Hat das Objekt genau einen Wurzelschlüssel, wird dieser zum Wurzelelement, sonst heißt die Wurzel `root`. Ungültige Element-Namen werden bereinigt (unerlaubte Zeichen werden zu `_`). Arrays werden als wiederholte gleichnamige Elemente ausgegeben. Es entsteht eine XML-Deklaration mit `encoding="UTF-8"`.
- **INI ist flach.** INI kennt nur eine Sektionsebene: Wurzel-Primitive kommen zuerst (ohne Sektionskopf), Unter-Objekte werden zu `[section]`-Blöcken, **tiefer verschachtelte** Objekte werden mit **Punkt-Notation** (`a.b.c`) flachgeklopft, Arrays werden zu komma-getrennten Werten. Ein **Array auf Wurzelebene** lässt sich nicht als INI ausgeben — das Tool meldet, dass INI auf oberster Ebene ein Objekt braucht.
- **INI-Typisierung beim Lesen:** unquotierte Werte werden auto-typisiert (`true`/`false`/`yes`/`no`/`on`/`off` → Boolean, Zahlen → Number); `;` und `#` leiten Kommentare ein.
- **Fehler werden gemeldet, nicht verschluckt.** Ungültige Eingabe (kaputtes JSON, ungültiges XML, …) führt zu einer Fehlermeldung mit Begründung statt zu einer stillen Falsch-Ausgabe.

Mehr zu sinnvollen Reihenfolgen und verlustarmen Round-Trips steht in den [Tipps & Tricks](https://www.jpkc.com/db/tools/convertor/tips/); konkrete Durchläufe zeigen die [Beispiele](https://www.jpkc.com/db/tools/convertor/examples/).

