Vai al contenuto

Blocchi Unicode

Unicode divide il suo spazio di codice in blocchi denominati, ognuno un intervallo contiguo riservato a uno script o una famiglia di simboli. Sapere in quale blocco vive un carattere è ciò che trasforma un mistero — perché ha incollato questo pausa, perché questo regex lo manca — in una domanda rispondibile.

I nomi dei blocchi sono identificatori, non descrizioni: sono usati letteralmente in un regex come \p{Block=Cyrillic} e in ogni file di dati Unicode, quindi rimangono in inglese in ogni lingua. Ciò che è tradotto è la frase accanto a loro.

Questa è una selezione curata piuttosto che tutti i circa 340 blocchi — quelli che si presentano quando si lavora con il testo. La tabella ASCII copre il primo blocco in dettaglio completo; questa pagina inizia dove quella si ferma.

Latino

5

Il latino si diffonde su diversi blocchi, ecco perché abbinarlo per blocco non funziona mai bene.

IntervalloBloccoChe cosa c'è dentroEsempio
U+0000–U+007FBasic LatinASCII, invariato: lettere latine, cifre, punteggiatura, codici di controlloA z 0 ?
U+0080–U+00FFLatin-1 SupplementAccenti dell'Europa occidentale, più £ § × ÷ e lo spazio non-breakingé ñ ü ×
U+0100–U+017FLatin Extended-AAccenti dell'Europa centrale e orientale — č, ł, ő, șč ł ő š
U+0180–U+024FLatin Extended-BLettere aggiuntive per le ortografie africane e foneticheƒ ǎ ȳ
U+1E00–U+1EFFLatin Extended AdditionalVietnamita e altre lettere latine multi-accentateạ ế ṛ

Segni e modificatori combinanti

4

Questi si allegano al carattere prima di loro e non hanno larghezza propria.

IntervalloBloccoChe cosa c'è dentroEsempio
U+0300–U+036FCombining Diacritical MarksAccenti applicati al carattere precedenteIl secondo, modo scomposto di scrivere é. Normalizzare a NFC per comprimerlo.◌́ ◌̈ ◌̌
U+02B0–U+02FFSpacing Modifier LettersLettere in apice e IPA stress e segni di tonoʰ ˈ ˚
U+FE00–U+FE0FVariation SelectorsSelettori invisibili che scelgono testo o presentazione emojiVS16 è ciò che trasforma ✔ in un emoji. Invisibile, ma conta.
U+FE20–U+FE2FCombining Half MarksMetà di segni che si estendono su due caratteri

Altri script

8
IntervalloBloccoChe cosa c'è dentroEsempio
U+0370–U+03FFGreek and CopticGreco, e le lettere copte che condividono il suo bloccoα Ω π
U+0400–U+04FFCyrillicRusso, ucraino, serbo, bulgaro e alfabeti correlatiд Я ж
U+0590–U+05FFHebrewLettere ebraiche, punti vocali e segni di cantillazioneא ש
U+0600–U+06FFArabicLettere arabe, nelle loro forme isolateا ب ي
U+0900–U+097FDevanagariHindi, sanscrito, marathi e lingue correlateक ह
U+0E00–U+0E7FThaiConsonanti thai, vocali e segni di tonoก ท
U+10A0–U+10FFGeorgianMkhedruli georgianoა ბ
U+1F00–U+1FFFGreek ExtendedGreco politonico — gli accenti dei testi classiciᾰ ῶ

Punteggiatura e numeri

5

La fonte della maggior parte dei caratteri invisibili che sopravvivono a una copia-incolla.

IntervalloBloccoChe cosa c'è dentroEsempio
U+2000–U+206FGeneral PunctuationTrattini, virgolette ricci, ellissi — e la maggior parte degli spazi invisibiliU+200B spazio a larghezza zero e U+2060 word joiner vivono qui.– — “ ” …
U+2070–U+209FSuperscripts and SubscriptsCifre e lettere in apice e pedice⁰ ⁴ ₂
U+20A0–U+20CFCurrency SymbolsSimboli di valuta che Latin-1 non ha spazio per — €, ₴, ₹, ₺€ ₴ ₺
U+2100–U+214FLetterlike SymbolsSimboli costruiti da lettere — ™, №, ℃, ℓ™ ℃ №
U+2150–U+218FNumber FormsFrazioni volgari e numeri romani come caratteri singoli⅓ ⅕ Ⅷ

Simboli e disegno

9
IntervalloBloccoChe cosa c'è dentroEsempio
U+2190–U+21FFArrowsFrecce in ogni direzione, singola e doppia← ↔ ⇒
U+2200–U+22FFMathematical OperatorsOperatori matematici — ∀, ∑, ≠, ∞∀ ∑ ≠
U+2300–U+23FFMiscellaneous TechnicalSimboli di tastiera e tecnici — ⌘, ⌥, ⌫, ⏎⌘ ⌥ ⏎
U+2500–U+257FBox DrawingLinee e angoli per caselle terminali e tabelle─ ┌ ╬
U+2580–U+259FBlock ElementsBlocchi solidi e ombreggiati, utilizzati per grafici a barre terminali█ ▓ ░
U+25A0–U+25FFGeometric ShapesQuadrati, cerchi, triangoli e diamanti■ ● ▲
U+2600–U+26FFMiscellaneous SymbolsMeteo, astrologia, scacchi, carte e i semi delle carte☀ ★ ♥
U+2700–U+27BFDingbatsOrnamenti del tipografo — segni di spunta, forbici, stelle✂ ✓ ➜
U+2800–U+28FFBraille PatternsTutti i 256 modelli di punti Braille, utilizzati anche per la grafica terminale⠁ ⣿

CJK e a larghezza intera

6

Le forme a larghezza intera sono caratteri separati dai loro gemelli ASCII, non un font.

IntervalloBloccoChe cosa c'è dentroEsempio
U+3000–U+303FCJK Symbols and PunctuationSpazio ideografico e punteggiatura CJKU+3000 è uno spazio a larghezza intera e non viene tagliato dalla maggior parte delle regole di spazio.  、 。
U+3040–U+309FHiraganaLa sillabario giapponese per parole native e grammaticaあ ん
U+30A0–U+30FFKatakanaLa sillabario giapponese per prestiti e enfasiア ン
U+4E00–U+9FFFCJK Unified IdeographsIl blocco Han principale — quasi 21.000 caratteri condivisi da cinese, giapponese e coreano日 本 語
U+AC00–U+D7AFHangul SyllablesTutti gli 11.172 sillabi coreani precompostiOgni uno può anche essere scritto come Jamo separato, che la normalizzazione riconcilia.한 글
U+FF00–U+FFEFHalfwidth and Fullwidth FormsCopie a larghezza intera di ASCII e Katakana a mezza larghezzaA non è A. Il testo incollato dai moduli CJK spesso ha bisogno di essere piegato in ASCII.A ! ア

Sopra U+FFFF, e i casi speciali

10

Qualsiasi cosa qui richiede due unità UTF-16, che è da dove provengono i bug di lunghezza della stringa.

IntervalloBloccoChe cosa c'è dentroEsempio
U+D800–U+DB7FHigh SurrogatesPrima metà di una coppia UTF-16 — mai valida da solaUn surrogato solo è ciò che una stringa tagliata attraverso un emoji lascia alle spalle.
U+DC00–U+DFFFLow SurrogatesSeconda metà di una coppia UTF-16 — mai valida da sola
U+E000–U+F8FFPrivate Use AreaNon assegnato da progettazione, per accordi privatiDove i font icon mettono i loro glifi. Senza significato senza il font corrispondente.
U+FFF0–U+FFFFSpecialsIl carattere di sostituzione e i relativi dell'ordine di byteU+FFFD è quello che vedi quando un decoder ha rinunciato a un byte.
U+1D400–U+1D7FFMathematical Alphanumeric SymbolsAlfabeti grassetto, corsivo, script e doppio colpo come caratteriLa fonte di 𝐟𝐚𝐤𝐞 𝐛𝐨𝐥𝐝 nei nomi dei social media. Non ricercabile.𝐀 𝓪 𝟙
U+1F300–U+1F5FFMiscellaneous Symbols and PictographsLa maggior parte delle emoji non-faccia — meteo, oggetti, luoghi, simboli🌍 🔥 📄
U+1F600–U+1F64FEmoticonsL'emoji della faccia😀 🙂
U+1F680–U+1F6FFTransport and Map SymbolsVeicoli, traffico e simboli di mappa🚀 🛑
U+1F900–U+1F9FFSupplemental Symbols and PictographsAggiunte successive di emoji — facce successive, gesti, oggetti🤖 🧠
U+E0000–U+E007FTagsCaratteri tag invisibili, utilizzati in sequenze di flagAnche il vettore per il testo invisibile contrabbandato all'interno di una stringa apparentemente normale.

FAQ

Qual è la differenza tra un blocco e uno script?
Un blocco è un intervallo contiguo di punti di codice; uno script è il sistema di scrittura a cui appartiene un carattere. Non sono gli stessi e spesso discordano — i caratteri latini sono distribuiti su almeno sette blocchi, e il blocco Combining Diacritical Marks è usato da diversi script contemporaneamente. In regex, \p{Script=Latin} è quasi sempre quello che vuoi, non \p{Block=…}.
Perché le righe surrogate non hanno caratteri di esempio?
Perché un surrogate non è un carattere. U+D800–U+DFFF sono riservati come meccanismo di coppia per UTF-16: due di loro insieme codificano un punto di codice sopra U+FFFF. Da soli sono testo non valido, che è esattamente perché una stringa tagliata nel mezzo di un emoji produce il carattere di sostituzione — hai mantenuto metà di una coppia.
Perché il mio carattere accentato a volte conta come due?
Perché ci sono due modi di scriverlo. é può essere un punto di codice dalla Latin-1 Supplement, o e seguito da un accento acuto che combina dal blocco Combining Diacritical Marks. Sembrano identici e si confrontano come diseguali. La normalizzazione a NFC comprime la seconda forma nella prima, e quello è ciò per cui esiste uno strumento di normalizzazione.
Un emoji è un carattere?
Raramente. Un singolo emoji visualizzato è spesso più punti di codice — un simbolo di base, modificatori del tono della pelle, selettori di variazione e joiner a larghezza zero che legano una famiglia insieme. Una lunghezza di 1 è l'eccezione, non la regola, e qualsiasi codice che affetta le stringhe per indice alla fine ne dividerà uno.