Ir para o conteúdo

Blocos Unicode

Unicode divide seu espaço de código em blocos nomeados, cada um um intervalo contíguo reservado para um script ou uma família de símbolos. Saber em qual bloco um caractere vive é o que transforma um mistério — por que esse paste quebrou, por que esse regex perde — em uma pergunta respondível.

Os nomes dos blocos são identificadores, não descrições: são usados literalmente em um regex como \p{Block=Cyrillic} e em todos os arquivos de dados Unicode, então eles permanecem em inglês em cada idioma. O que é traduzido é a frase ao lado deles.

Esta é uma seleção curada em vez de todos os aproximadamente 340 blocos — aqueles que aparecem ao trabalhar com texto. A tabela ASCII cobre o primeiro bloco em detalhes completos; esta página começa onde aquela para.

Latino

5

Latin é distribuído em vários blocos, por isso corresponder a ele por bloco nunca funciona completamente.

IntervaloBlocoO que está neleAmostra
U+0000–U+007FBasic LatinASCII, inalterado: letras latinas, dígitos, pontuação, códigos de controleA z 0 ?
U+0080–U+00FFLatin-1 SupplementAcentos da Europa Ocidental, além de £ § × ÷ e o espaço não-quebrávelé ñ ü ×
U+0100–U+017FLatin Extended-AAcentos da Europa Central e Oriental — č, ł, ő, șč ł ő š
U+0180–U+024FLatin Extended-BLetras adicionais para ortografias africanas e fonéticasƒ ǎ ȳ
U+1E00–U+1EFFLatin Extended AdditionalVietnamita e outras letras latinas com múltiplos acentosạ ế ṛ

Marcas e modificadores combinados

4

Estes se anexam ao caractere antes deles e não têm largura própria.

IntervaloBlocoO que está neleAmostra
U+0300–U+036FCombining Diacritical MarksAcentos aplicados ao caractere anteriorA segunda forma, decomposta para escrever é. Normalizar para NFC para colapsá-lo.◌́ ◌̈ ◌̌
U+02B0–U+02FFSpacing Modifier LettersLetras sobrescritas e marcas de stress e tom de IPAʰ ˈ ˚
U+FE00–U+FE0FVariation SelectorsSeletores invisíveis escolhendo apresentação de texto ou emojiVS16 é o que transforma ✔ em um emoji. Invisível, mas conta.
U+FE20–U+FE2FCombining Half MarksMetades de marcas abrangendo dois caracteres

Outros scripts

8
IntervaloBlocoO que está neleAmostra
U+0370–U+03FFGreek and CopticGrego, e as letras coptas que compartilham seu blocoα Ω π
U+0400–U+04FFCyrillicRusso, ucraniano, sérvio, búlgaro e alfabetos relacionadosд Я ж
U+0590–U+05FFHebrewLetras hebraicas, pontos de vogais e marcas de cantilaçãoא ש
U+0600–U+06FFArabicLetras árabes, em suas formas isoladasا ب ي
U+0900–U+097FDevanagariHindi, sânscrito, Marathi e idiomas relacionadosक ह
U+0E00–U+0E7FThaiConsoantes tailandesas, vogais e marcas de tomก ท
U+10A0–U+10FFGeorgianGeorgian Mkhedruliა ბ
U+1F00–U+1FFFGreek ExtendedGrego politônico — os acentos de textos clássicosᾰ ῶ

Pontuação e números

5

A fonte da maioria dos caracteres invisíveis que sobrevivem a um colar-paste.

IntervaloBlocoO que está neleAmostra
U+2000–U+206FGeneral PunctuationTravessões, aspas curvas, reticências — e espaços invisíveis maisU+200B zero-width space e U+2060 word joiner vivem aqui.– — “ ” …
U+2070–U+209FSuperscripts and SubscriptsDígitos e letras sobrescritos e subscritos⁰ ⁴ ₂
U+20A0–U+20CFCurrency SymbolsSímbolos de moeda que Latin-1 não tem espaço para — €, ₴, ₹, ₺€ ₴ ₺
U+2100–U+214FLetterlike SymbolsSímbolos construídos a partir de letras — ™, №, ℃, ℓ™ ℃ №
U+2150–U+218FNumber FormsFrações vulgares e numerais romanos como caracteres únicos⅓ ⅕ Ⅷ

Símbolos e desenho

9
IntervaloBlocoO que está neleAmostra
U+2190–U+21FFArrowsSetas em todas as direções, simples e duplas← ↔ ⇒
U+2200–U+22FFMathematical OperatorsOperadores matemáticos — ∀, ∑, ≠, ∞∀ ∑ ≠
U+2300–U+23FFMiscellaneous TechnicalSímbolos de teclado e técnicos — ⌘, ⌥, ⌫, ⏎⌘ ⌥ ⏎
U+2500–U+257FBox DrawingLinhas e cantos para caixas de terminal e tabelas─ ┌ ╬
U+2580–U+259FBlock ElementsBlocos sólidos e sombreados, usados para gráficos de barras de terminal█ ▓ ░
U+25A0–U+25FFGeometric ShapesQuadrados, círculos, triângulos e diamantes■ ● ▲
U+2600–U+26FFMiscellaneous SymbolsClima, astrologia, xadrez, cartas e naipes☀ ★ ♥
U+2700–U+27BFDingbatsOrnamentos de impressora — marcas de seleção, tesoura, estrelas✂ ✓ ➜
U+2800–U+28FFBraille PatternsTodos os 256 padrões de pontos Braille, usados para gráficos de terminal também⠁ ⣿

CJK e largura completa

6

As formas de largura completa são caracteres separados de seus gêmeos ASCII, não uma fonte.

IntervaloBlocoO que está neleAmostra
U+3000–U+303FCJK Symbols and PunctuationEspaço ideográfico e pontuação CJKU+3000 é um espaço de largura completa e não é aparado pela maioria das regras de espaço em branco.  、 。
U+3040–U+309FHiraganaO silabário japonês para palavras nativas e gramáticaあ ん
U+30A0–U+30FFKatakanaO silabário japonês para empréstimos e ênfaseア ン
U+4E00–U+9FFFCJK Unified IdeographsO bloco Han principal — quase 21.000 caracteres compartilhados por chinês, japonês e coreano日 本 語
U+AC00–U+D7AFHangul SyllablesTodas as 11.172 sílabas coreanas pré-compostasCada um também pode ser escrito como Jamo separado, que normalização reconcilia.한 글
U+FF00–U+FFEFHalfwidth and Fullwidth FormsCópias de largura completa de ASCII, e Katakana de meia larguraA não é A. Texto colado de formulários CJK frequentemente precisa dobrado para ASCII.A ! ア

Acima de U+FFFF, e os casos especiais

10

Qualquer coisa aqui leva duas unidades UTF-16, que é de onde vêm os bugs de comprimento de string.

IntervaloBlocoO que está neleAmostra
U+D800–U+DB7FHigh SurrogatesPrimeira metade de um par UTF-16 — nunca válida sozinhaUm substituo solitário é o que uma string cortada através de um emoji deixa para trás.
U+DC00–U+DFFFLow SurrogatesSegunda metade de um par UTF-16 — nunca válida sozinha
U+E000–U+F8FFPrivate Use AreaNão atribuído por design, para acordos privadosOnde fontes de ícone colocam seus glifos. Sem sentido sem a fonte correspondente.
U+FFF0–U+FFFFSpecialsO caractere de substituição e os parentes da marca de ordem de byteU+FFFD é o que você vê quando um decodificador desistiu.
U+1D400–U+1D7FFMathematical Alphanumeric SymbolsAlfabetos em negrito, itálico, script e double-struck como caracteresA fonte de 𝐟𝐚𝐤𝐞 𝐛𝐨𝐥𝐝 em nomes de mídia social. Não pesquisável.𝐀 𝓪 𝟙
U+1F300–U+1F5FFMiscellaneous Symbols and PictographsMaioria de emoji não-rosto — clima, objetos, lugares, símbolos🌍 🔥 📄
U+1F600–U+1F64FEmoticonsO emoji rosto😀 🙂
U+1F680–U+1F6FFTransport and Map SymbolsVeículos, tráfego e símbolos de mapa🚀 🛑
U+1F900–U+1F9FFSupplemental Symbols and PictographsAdições posteriores de emoji — rostos posteriores, gestos, objetos🤖 🧠
U+E0000–U+E007FTagsCaracteres de tag invisíveis, usados em sequências de bandeiraTambém o vetor para texto invisível contrabandendo dentro de uma string de aparência normal.

FAQ

Qual é a diferença entre um bloco e um script?
Um bloco é um intervalo contíguo de pontos de código; um script é o sistema de escrita a que um caractere pertence. Eles não são os mesmos e frequentemente discordam — caracteres latinos são espalhados por pelo menos sete blocos, e o bloco Combining Diacritical Marks é usado por vários scripts ao mesmo tempo. Em regex, \p{Script=Latin} é quase sempre o que você quer, não \p{Block=…}.
Por que as linhas substituas não têm caracteres de exemplo?
Porque um substituo não é um caractere. U+D800–U+DFFF são reservados como um mecanismo de par para UTF-16: dois deles juntos codificam um ponto de código acima de U+FFFF. Por conta própria são texto inválido, que é exatamente por que uma string cortada no meio de um emoji produz o caractere de substituição — você manteve metade de um par.
Por que meu caractere acentuado às vezes conta como dois?
Porque há duas maneiras de escrevê-lo. é pode ser um ponto de código de Latin-1 Supplement, ou e seguido de um acento agudo combinado do bloco Combining Diacritical Marks. Eles parecem idênticos e comparecem como desiguais. Normalizar para NFC colapsa a segunda forma na primeira, e é para isso que uma ferramenta de normalização serve.
Um emoji é um caractere?
Raramente. Um único emoji exibido é frequentemente vários pontos de código — um símbolo base, modificadores de tom de pele, seletores de variação e zero-width joiners ligando uma família. Um comprimento de 1 é a exceção, não a regra, e qualquer código que fatia strings por índice eventualmente dividirá um.