Riempire alla larghezza visiva
Allinei colonne che mescolano testo latino e dell'Asia orientale: 東京 occupa 4 colonne, quindi riempirlo fino a 8 aggiunge solo 4 spazi, non 6. I caratteri larghi e quasi tutte le emoji contano come due colonne. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Testo
- 東京
- Larghezza
- 8
- Lato
- Right
- Risultato
- 東京
- Carattere
- Lunghezza originale
- 2
- Larghezza visiva originale
- 4
Riempire una stringa perché le colonne restino allineate in un terminale è un problema di larghezza visiva, non di conteggio dei caratteri. Ideogrammi dell'Asia orientale, sillabe hangul, lettere latine a larghezza piena e la maggior parte degli emoji occupano due colonne in un carattere monospazio, mentre i segni combinanti, i selettori di variazione e i joiner a larghezza zero non ne occupano alcuna. Un riempimento basato sulla lunghezza JavaScript disallinea qualsiasi cella che mescoli latino e giapponese, cinese o coreano. Questo strumento misura le colonne di visualizzazione nello stile East Asian Width e inserisce un carattere di riempimento di una colonna a sinistra, a destra o su entrambi i lati finché non si raggiunge il numero di colonne obiettivo.
Come si misura la larghezza visiva di colonna
In un terminale monospazio tipico ogni lettera, cifra e segno di punteggiatura ASCII occupa una colonna. Quel modello mentale si spezza non appena la stringa contiene un carattere il cui East Asian Width è Wide o Fullwidth. Ideogrammi unificati CJK, sillabe hangul, cifre a larghezza piena (le forme ideografiche da zero a nove) e il blocco latino a larghezza piena occupano ciascuno due colonne.
I segni combinanti delle categorie Mn o Me, i caratteri di formato, le vocali mediali e le consonanti finali jamo dell'hangul, i selettori di variazione e il joiner a larghezza zero occupano zero colonne e si attaccano al grafema precedente. Le coppie di indicatori regionali che formano un emoji bandiera sono trattate come un unico cluster di due colonne, e gli emoji uniti con un joiner a larghezza zero restano un cluster di larghezza due anziché una pila di pittogrammi indipendenti.
I caratteri a larghezza ambigua, come le lettere greche e alcuni simboli, seguono la convenzione POSIX e occidentale e contano come una colonna, il che coincide con la maggior parte dei terminali Linux e macOS fuori da una localizzazione dell'Asia orientale. I caratteri di controllo, tabulazione e a capo compresi, sono rifiutati: la larghezza del tab non è una proprietà della stringa, e questo strumento riempie una cella, non un'intera tabella.
L'algoritmo percorre i punti di codice Unicode, mai le coppie surrogato UTF-16, così un singolo emoji fuori dal Basic Multilingual Plane è un carattere, non due. Il risultato è lo stesso conteggio di colonne che Lei otterrebbe da una misura prudente in stile wcwidth, esattamente ciò che serve prima di aggiungere caratteri di riempimento perché un nome giapponese e uno SKU latino condividano un bordo destro dritto.
Dove il riempimento a larghezza visiva compare nel lavoro reale
Gli autori di CLI, i formattatori di registri e chiunque stampi una tabella in carattere monospazio incontrano questo problema la prima volta che un valore giapponese, cinese o coreano cade in una colonna dimensionata con la lunghezza della stringa. I numeri di fattura stanno accanto ai nomi di prodotto; un nome CJK di due caratteri JavaScript occupa quattro colonne di terminale e spinge la colonna del prezzo a destra.
Le tabelle Markdown, i pannelli di stato di un README e le stampanti termiche di scontrini hanno lo stesso vincolo quando una cella mescola scritture. Le pipeline di dati che emettono file di esportazione a larghezza fissa per i mercati dell'Asia orientale non possono usare un riempimento per conteggio di caratteri senza rompere il layout che si aspetta il parser bancario o mainframe a valle. Preferisca questa pagina quando l'intento di ricerca è riempire alla larghezza monospazio, larghezza visiva, East Asian Width, wcwidth o allineare colonne CJK in un terminale.
Il pad a sinistra o con zeri di identificatori ASCII è un'altra query e appartiene allo strumento di pad per conteggio di caratteri; questa pagina affronta il problema di allineamento delle colonne che compare solo quando caratteri larghi entrano nella cella.
Casi d'uso
Allineare celle CJK nelle tabelle di terminale
Riempia a destra celle miste di latino e giapponese, cinese o coreano fino a una larghezza visiva condivisa così prezzo e stato restano diritti nell'uscita CLI.
Campi di esportazione dell'Asia orientale a larghezza fissa
Riempia con spazi nomi di prodotto e indirizzi fino al budget di colonne che un file legacy a larghezza fissa si aspetta, contando i caratteri a larghezza piena come due colonne.
Centrare banner a scritture miste
Riempia entrambi i lati di un titolo breve che contiene CJK o emoji così una riga di scontrino o un'intestazione di registro monospazio risulta visivamente centrata.
Domande frequenti
In che cosa differisce dal riempimento ordinario di stringhe?
Il pad ordinario conta i caratteri JavaScript. Questo strumento conta le colonne visive monospazio, quindi 東京 ha larghezza 4, non 2, e le colonne restano allineate quando latino e CJK condividono una riga.
Posso riempire con uno spazio a larghezza piena o un emoji?
No. Il carattere di riempimento deve occupare esattamente una colonna visiva. Usi uno spazio ASCII, 0, un trattino o un altro glifo stretto.
Come si contano emoji e bandiere?
La maggior parte degli emoji occupa due colonne. Una coppia di indicatori regionali (una bandiera) è un cluster di due colonne. Le sequenze con joiner a larghezza zero restano un cluster invece di sommare le larghezze.
Quanto costa il riempimento a larghezza visiva?
Lo strumento del browser è gratuito e gira in locale.
Cosa succede se il testo è già più largo dell'obiettivo?
Non viene tagliato nulla. Lo strumento si ferma e la avvisa invece di accorciare i suoi dati in silenzio, così può scegliere una colonna più larga. Se le larghezze coincidono, il testo torna senza riempimento.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"text": "東京",
"width": 8,
"side": "right"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.pad_visual_width",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_chars | 65536 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Quando il testo è già più largo dell'obiettivo, la richiesta fallisce con invalid_input invece di troncare i Suoi dati in silenzio.
Che cosa si invia e che cosa si ottiene
Il testo vuoto è ammesso e produce una stringa di solo riempimento della larghezza richiesta. Il char facoltativo è un solo punto di codice la cui larghezza visiva è esattamente una colonna e per impostazione predefinita è uno spazio ASCII; uno spazio a larghezza piena o un emoji di riempimento è rifiutato perché un riempimento di due colonne non può colpire un budget residuo dispari. Numeri e booleani in text sono convertiti in stringhe decimali o true/false; oggetti e array sono rifiutati. Controllo classico: il toponimo giapponese di due caratteri 東京 ha larghezza visiva quattro, quindi riempirlo a destra fino a width otto con spazi produce 東京 più quattro spazi; riempire a sinistra l'ASCII quarantadue fino a width sei con zero produce ancora 000042, come un pad ordinario per un ingresso solo latino. Invii i campi obbligatori text, width e side, più il char facoltativo. Text è la cella da riempire; sono accettati gli alias input, value, data, s, message, string, content e body. Width è il conteggio obiettivo di colonne visive, un intero non negativo; gli alias target, columns, size e n funzionano quando width è omesso. Side deve essere left, right o both, con alias start o l, end o r, e center o c. Un testo più lungo del tetto documentato di caratteri, o un width sopra il massimo documentato, fallisce con invalid_input. In caso di successo la risposta restituisce text, width, side e char, più result con la stringa riempita, original_length e length come lunghezze di stringa JavaScript, original_visual_width e visual_width come conteggi di colonne, pad_count, pad_left, pad_right e operation uguale a pad_visual_width. Il prezzo delle chiamate API riuscite è la base pubblicata di $0.002 per elemento; i fallimenti di convalida, compreso un obiettivo sotto la larghezza visiva attuale, non sono fatturati.
Dove il riempimento a larghezza visiva compare nel lavoro reale
Poiché questa capacità è un motore parse puro, ogni chiamata riuscita costa il prezzo base pubblicato di $0.002, senza token di modello e senza rete in uscita, e una convalida fallita non consuma saldo.
Domande tecniche
Che succede se il testo è già più largo dell'obiettivo?
La richiesta fallisce con invalid_input. Questo strumento non tronca mai; la larghezza obiettivo deve essere maggiore o uguale alla larghezza visiva misurata.