Auf visuelle Breite auffüllen
Richten Sie Spalten aus, die lateinische und ostasiatische Schrift mischen: 東京 belegt 4 Spalten, daher fügt das Auffüllen auf 8 nur 4 Leerzeichen hinzu, nicht 6. Breite Zeichen und die meisten Emojis zählen doppelt. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Rechenbeispiel
- Text
- 東京
- Breite
- 8
- Seite
- Right
- Ergebnis
- 東京
- Zeichen
- Ursprüngliche Länge
- 2
- Ursprüngliche visuelle Breite
- 4
Eine Zeichenkette so aufzufüllen, dass Spalten im Terminal gerade stehen, ist ein Problem der visuellen Breite, nicht der Zeichenanzahl. Ostasiatische Ideogramme, Hangeul-Silben, lateinische Vollbreitbuchstaben und die meisten Emoji belegen in einer Festbreitenschrift zwei Spalten, während kombinierende Zeichen, Variationsselektoren und Verbinder der Breite null keine belegen. Ein Auffüllen nach JavaScript-Länge verschiebt jede Zelle, die Latein mit Japanisch, Chinesisch oder Koreanisch mischt. Dieses Werkzeug misst Anzeigespalten im Stil von East Asian Width und fügt ein einspaltiges Füllzeichen links, rechts oder beidseitig ein, bis die Zielspaltenzahl erreicht ist.
Wie die visuelle Spaltenbreite gemessen wird
In einem üblichen Monospace-Terminal belegt jeder ASCII-Buchstabe, jede Ziffer und jedes Satzzeichen eine Spalte. Dieses Denkmodell bricht, sobald die Zeichenkette ein Zeichen enthält, dessen East Asian Width Wide oder Fullwidth ist. Vereinheitlichte CJK-Ideogramme, Hangeul-Silben, Vollbreitziffern (die ideographischen Formen von null bis neun) und der lateinische Vollbreitblock belegen je zwei Spalten.
Kombinierende Zeichen der Kategorien Mn oder Me, Formatzeichen, mediale Vokale und finale Konsonanten der Hangeul-Jamo, Variationsselektoren und der Verbinder der Breite null belegen null Spalten und heften sich an das vorangehende Graphem. Regionalindikator-Paare, die ein Flaggen-Emoji bilden, gelten als ein einziger Zweispaltcluster, und mit einem Verbinder der Breite null verbundene Emoji bleiben ein Cluster der Breite zwei statt eines Stapels unabhängiger Piktogramme.
Zeichen mehrdeutiger Breite wie griechische Buchstaben und manche Symbole folgen der POSIX- und Westkonvention und zählen als eine Spalte, passend zu den meisten Linux- und macOS-Terminals außerhalb einer ostasiatischen Locale. Steuerzeichen einschließlich Tabulator und Zeilenumbruch werden abgelehnt: die Tabulatorbreite ist keine Eigenschaft der Zeichenkette, und dieses Werkzeug füllt eine Zelle, nicht eine ganze Tabelle. Der Algorithmus läuft über Unicode-Codepunkte, niemals über UTF-16-Surrogatpaare, sodass ein einzelnes Emoji außerhalb der Basic Multilingual Plane ein Zeichen ist, nicht zwei.
Das Ergebnis ist dieselbe Spaltenzahl, die eine vorsichtige Messung im Stil von wcwidth liefern würde — genau das, was Sie brauchen, bevor Füllzeichen ergänzt werden, damit ein japanischer Name und eine lateinische SKU eine gerade rechte Kante teilen.
Was Sie senden und was Sie zurückerhalten
Leerer Text ist erlaubt und erzeugt eine reine Füllzeichenkette der gewünschten Breite. Width ist die Zielanzahl visueller Spalten, eine nichtnegative ganze Zahl; die Aliasse target, columns, size und n greifen, wenn width fehlt. Side muss left, right oder both sein, mit den Aliassen start oder l, end oder r sowie center oder c.
Das optionale char ist ein einzelner Codepunkt, dessen eigene visuelle Breite genau eine Spalte ist, standardmäßig ein ASCII-Leerzeichen; ein Vollbreitleerzeichen oder ein Emoji als Füllung wird abgelehnt, weil eine zweispaltige Füllung ein ungerades Restbudget nicht treffen kann. Zahlen und boolesche Werte für text werden zu Dezimal- bzw. true/false-Zeichenketten gewandelt; Objekte und Arrays werden abgelehnt.
Klassische Prüfung: der zweizeichenige japanische Ortsname 東京 hat die visuelle Breite vier, daher ergibt rechtsseitiges Auffüllen auf width acht mit Leerzeichen 東京 plus vier Leerzeichen; linksseitiges Auffüllen von ASCII zweiundvierzig auf width sechs mit Null ergibt weiterhin 000042, wie gewöhnliches Pad bei rein lateinischer Eingabe.
Wo visuelles Auffüllen in der Praxis vorkommt
CLI-Autoren, Protokollformatierer und jeder, der eine Tabelle in Festbreitenschrift ausgibt, trifft dieses Problem, sobald ein japanischer, chinesischer oder koreanischer Wert in eine mit Zeichenkettenlänge bemessene Spalte fällt. Rechnungsnummern stehen neben Produktnamen; ein CJK-Name mit zwei JavaScript-Zeichen belegt vier Terminalspalten und schiebt die Preisspalte nach rechts. Markdown-Tabellen, Statusbretter in einem README und Thermobon-Drucker haben dieselbe Einschränkung, sobald eine Zelle Schriften mischt.
Datenpipelines, die festbreite Exportdateien für ostasiatische Märkte erzeugen, dürfen kein Auffüllen nach Zeichenanzahl verwenden, ohne das Layout zu zerbrechen, das der nachgelagerte Bank- oder Mainframe-Parser erwartet. Bevorzugen Sie diese Seite, wenn die Suchabsicht Auffüllen auf Monospace-Breite, visuelle Breite, East Asian Width, wcwidth oder das Ausrichten von CJK-Spalten im Terminal ist. Links- oder Nullauffüllen von ASCII-Kennungen ist eine andere Anfrage und gehört zum Werkzeug für das Auffüllen nach Zeichenanzahl; diese Seite gilt dem Spaltenausrichtungsproblem, das erst auftritt, wenn breite Zeichen in die Zelle gelangen.
Anwendungsfälle
CJK-Zellen in Terminaltabellen ausrichten
Füllen Sie gemischte lateinische und japanische, chinesische oder koreanische Zellen rechts auf eine gemeinsame visuelle Breite auf, damit Preis- und Statusspalten in der CLI-Ausgabe gerade bleiben.
Festbreite ostasiatische Exportfelder
Füllen Sie Produktnamen und Adressen mit Leerzeichen auf das Spaltenbudget, das eine festbreite Altdatei erwartet, und zählen Sie Vollbreitzeichen als zwei Spalten.
Banner mit gemischten Schriften zentrieren
Füllen Sie beide Seiten eines kurzen Titels mit CJK oder Emoji, damit eine monospacierte Bonzeile oder eine Protokollüberschrift visuell zentriert ist.
Häufige Fragen
Worin unterscheidet sich das vom gewöhnlichen Zeichenketten-Auffüllen?
Gewöhnliches Pad zählt JavaScript-Zeichen. Dieses Werkzeug zählt visuelle Monospace-Spalten, daher hat 東京 die Breite 4, nicht 2, und die Spalten bleiben ausgerichtet, wenn Latein und CJK eine Zeile teilen.
Kann ich mit einem Vollbreitleerzeichen oder einem Emoji auffüllen?
Nein. Das Füllzeichen muss genau eine visuelle Spalte belegen. Verwenden Sie ein ASCII-Leerzeichen, 0, einen Bindestrich oder eine andere schmale Glyphe.
Wie werden Emoji und Flaggen gezählt?
Die meisten Emoji belegen zwei Spalten. Ein Regionalindikator-Paar (eine Flagge) ist ein Zweispaltcluster. Sequenzen mit Verbinder der Breite null bleiben ein Cluster, statt Breiten zu stapeln.
Was passiert, wenn mein Text schon breiter als das Ziel ist?
Es wird nichts abgeschnitten. Das Werkzeug bricht ab und meldet es, statt Ihre Daten stillschweigend zu kürzen, sodass Sie eine breitere Spalte wählen können. Sind die Breiten gleich, kommt der Text ohne Füllzeichen zurück.
Darf der Text Tabs oder Zeilenumbrüche enthalten?
Nein. Steuerzeichen wie Tab und Zeilenumbruch werden abgelehnt, weil die Breite eines Tabs nicht vom Text abhängt, sondern vom Terminal. Das Werkzeug füllt immer genau eine Zelle auf, keine ganze Tabelle.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/str/pad-visual-width \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"東京","width":8,"side":"right"}'const res = await fetch("https://api.kit.forhosting.com/str/pad-visual-width", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "東京",
"width": 8,
"side": "right"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/pad-visual-width",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "東京",
"width": 8,
"side": "right"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/pad-visual-width", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"東京","width":8,"side":"right"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"東京","width":8,"side":"right"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/pad-visual-width", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"text": "東京",
"width": 8,
"side": "right"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.pad_visual_width",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_chars | 65536 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Ist der Text bereits breiter als das Ziel, schlägt die Anfrage mit invalid_input fehl, statt Ihre Daten still zu kürzen.
Was Sie senden und was Sie zurückerhalten
Senden Sie die Pflichtfelder text, width und side sowie das optionale char. Text ist die aufzufüllende Zelle; die Aliasse input, value, data, s, message, string, content und body werden akzeptiert. Text über der dokumentierten Zeichenobergrenze oder ein width über dem dokumentierten Maximum scheitert mit invalid_input. Bei Erfolg gibt die Antwort text, width, side und char zurück, plus result für die aufgefüllte Zeichenkette, original_length und length als JavaScript-Zeichenkettenlängen, original_visual_width und visual_width als Spaltenzahlen, pad_count, pad_left, pad_right und operation gleich pad_visual_width. Der Preis erfolgreicher API-Aufrufe ist die veröffentlichte Basis von $0.002 je Element; Validierungsfehler einschließlich eines Ziels unter der aktuellen visuellen Breite werden nicht berechnet.
Wo visuelles Auffüllen in der Praxis vorkommt
Weil diese Fähigkeit eine reine Parse-Engine ist, kostet jeder erfolgreiche Aufruf den veröffentlichten Grundpreis von $0.002, ohne Modell-Token und ohne ausgehendes Netz, und eine fehlgeschlagene Validierung wird nicht berechnet.
Technische Fragen
Was geschieht, wenn der Text bereits breiter als das Ziel ist?
Die Anfrage schlägt mit invalid_input fehl. Dieses Werkzeug kürzt nie; die Zielbreite muss größer oder gleich der gemessenen visuellen Breite sein.
Was kostet das Auffüllen auf visuelle Breite?
Das Browser-Werkzeug ist kostenlos und läuft örtlich. API-Anfragen nutzen vorausbezahltes KIT-Guthaben zu $0.002 je erfolgreichem Element; ungültige Eingabe wird nicht berechnet.