Esse adorável Unicode



Aqui está uma lista atualizada dos mais maravilhosos "brindes" Unicode, bem como pacotes e recursos

Unicode é incrível! Antes de sua aparição, a comunicação internacional era exaustiva: cada um definia seu próprio conjunto de caracteres estendidos separado na metade superior do ASCII (as chamadas páginas de código). Isso criou conflito. Basta pensar que os alemães tiveram que negociar com os coreanos, onde está a página de códigos de quem. Felizmente, o Unicode apareceu e introduziu um padrão comum. O Unicode 8.0 cobre mais de 120.000 caracteres de mais de 129 scripts. Moderno e antigo, e ainda não decifrado. O Unicode suporta texto da esquerda para a direita e da direita para a esquerda, sobrepõe caracteres e inclui uma variedade de símbolos culturais e políticos, religiosos e emojis. O Unicode é incrivelmente humano e suas capacidades são muito subestimadas.

Conteúdo



Breve introdução


Quais caracteres estão incluídos no Unicode Standard?


O padrão Unicode define códigos para caracteres nos principais idiomas modernos. São scripts alfabéticos europeus, scripts do Oriente Médio da direita para a esquerda e muitos scripts asiáticos.

O padrão também contém sinais de pontuação, diacríticos, símbolos matemáticos, símbolos técnicos, setas, símbolos, emojis etc. Ele fornece códigos para diacríticos que alteram sinais de caracteres, como til (~). Eles são usados ​​em combinação com os básicos para representar caracteres acentuados (por exemplo, ñ). Em geral, o Unicode versão 9.0 fornece códigos para 128.172 caracteres de alfabetos mundiais, conjuntos de ideogramas e coleções de caracteres.

Os caracteres mais comuns são colocados nos primeiros pontos de código de 64 K, uma área do espaço de código chamada plano multilíngue principal ou BMP, abreviado. Existem dezesseis outros planos adicionais disponíveis para codificar outros caracteres, com mais de 850.000 pontos de código não utilizados. Eles podem ser úteis para adicionar novos personagens a versões futuras do padrão.

O padrão Unicode também reserva pontos de código para uso privado. Fornecedores ou usuários finais podem designá-los em seus próprios sistemas para seus personagens ou usá-los com fontes especializadas. O BMP possui 6400 pontos de código para uso privado e outros 131 068 pontos de código adicionais para uso privado, se 6400 não for suficiente para aplicativos específicos.

Codificações de caracteres Unicode


Os padrões de codificação de caracteres determinam não apenas a identidade de cada caractere e seu valor numérico ou ponto de código, mas também como esse valor é representado em bits.

O padrão Unicode define três formas de codificação que permitem a transmissão dos mesmos dados: um byte, uma palavra e uma palavra dupla (ou seja, 8, 16 ou 32 bits por unidade de código). Todos os três formulários codificam o mesmo conjunto de caracteres comum e podem ser efetivamente convertidos um no outro sem perda de dados. O Consórcio Unicode endossa totalmente o uso de qualquer um desses formulários de codificação como uma maneira acordada de implementar o Padrão Unicode.

UTF-8 é popular para protocolos HTML e similares. UTF-8 é uma maneira de converter todos os caracteres Unicode em uma codificação variável de comprimento de bytes. Sua vantagem é que os caracteres Unicode que correspondem ao conjunto ASCII familiar têm os mesmos valores de bytes que o ASCII, e os caracteres Unicode convertidos em UTF-8 podem ser usados ​​com muitos softwares existentes, sem grandes modificações.

O UTF-16 é popular em muitos ambientes em que é necessário equilibrar o acesso eficiente a caracteres com armazenamento econômico. É bastante compacto e todos os caracteres usados ​​com freqüência são colocados em um bloco de código de 16 bits, enquanto todos os outros caracteres estão disponíveis através de pares de blocos de código de 16 bits.

UTF-32 é útil quando a quantidade de memória não é uma preocupação, mas requer acesso a caracteres em um único código de largura fixa. Aqui, cada caractere Unicode é codificado em um único bloco de código de 32 bits.

Todas as três formas de codificação requerem não mais que 4 bytes (ou 32 bits) para cada caractere.

Fale sobre números


O conjunto de caracteres Unicode é dividido em 17 segmentos principais (planos), que são divididos em blocos. Em cada plano, há um lugar para 65 536 (2 16 ) pontos de código, o que cria um total de 1.114.112 pontos de código. Existem dois "planos de uso privado" (nº 16 e nº 17) que são alocados para uso a critério das empresas / usuários. Eles possuem 131.072 pontos de código.

Não.TítuloRange
1Plano multilíngue principal(de U + 0000 a U + FFFF)
2)Plano multilíngue adicional(de U + 10000 a U + 1FFFF)
3)Plano ideográfico adicional(de U + 20.000 a U + 2FFFF)
4)Plano ideográfico terciário(de U + 30000 a U + 3FFFF)
5)Avião 5 (não usado)(de U + 40.000 a U + 4FFFF)
6Avião 6 (não usado)(de U + 50.000 a U + 5FFFF)
7)Avião 7 (não usado)(de U + 60.000 a U + 6FFFF)
8)Avião 8 (não usado)(de U + 70.000 a U + 7FFFF)
9Plano 9 (não usado)(de U + 80.000 a U + 8FFFF)
10)Avião 10 (não usado)(de U + 90.000 a U + 9FFFF)
11)Plano 11 (não usado)(de U + A0000 a U + AFFFF)
12)Avião 12 (não usado)(de U + B0000 a U + BFFFF)
13)Plano 13 (não usado)(de U + C0000 a U + CFFFF)
14)Avião 14 (não usado)(de U + D0000 a U + DFFFF)
15Plano adicional especializado(de U + E0000 a U + EFFFF)
16Área adicional para uso privado - A(de U + F0000 a U + FFFFF)
17Área adicional para uso privado - B(de U + 100000 a U + 10FFFF)

O primeiro plano é chamado de principal plano multilíngue ou BMP. Ele contém pontos de código de U + 0000 a U + FFFF, ou seja, os caracteres mais usados. Os dezesseis planos restantes (U + 010000 → U + 10FFFF) são chamados adicionais ou astrais.

Pares substitutos UTF-16


Símbolos fora do plano principal, como um tetragrammaton que significa o centro (U + 1D306), podem ser codificados em UTF-16 com apenas duas unidades de código de 16 bits: 0xD834 0xDF06. Isso é chamado de par substituto. Observe que um par substituto representa apenas um caractere.

A primeira unidade de código de um par substituto está sempre no intervalo de 0xD800 a 0xDBFF e é chamada de parte superior do par.

A segunda unidade de código do par substituto está sempre no intervalo de 0xDC00 a 0xDFFF e é chamada de parte inferior do par.

Matthias Binens

Par substituto: uma representação de um símbolo abstrato, consistindo em uma sequência de duas unidades de código de 16 bits, em que o primeiro valor do par é a unidade de código substituto superior e o segundo é a unidade de código substituto inferior. Pares substitutos são usados ​​apenas no UTF-16.

Unicode 8.0 Capítulo 3.8 - Substitutos

Cálculo de pares substitutos


O caractere Unicode "Pilha de merda" (U + 1F4A9) no UTF-16 terá que ser codificado como um par substituto, ou seja, dois substitutos. Para converter qualquer ponto de código em um par substituto, use este algoritmo (em JavaScript). Lembre-se de que usamos notação hexadecimal.

var High_Surrogate = function(Code_Point){ return Math.floor((Code_Point - 0x10000) / 0x400) + 0xD800 }; var Low_Surrogate = function(Code_Point){ return (Code_Point - 0x10000) % 0x400 + 0xDC00 }; // Reverses The Conversion var Code_Point = function(High_Surrogate, Low_Surrogate){ return (High_Surrogate - 0xD800) * 0x400 + Low_Surrogate - 0xDC00 + 0x10000; }; 



Composição e decomposição


O Unicode inclui um mecanismo para alterar a forma de um caractere, que estende bastante o conjunto de glifos com suporte. Isso se aplica aos diacríticos combináveis. Eles são inseridos após o personagem principal. Várias marcas diacríticas podem ser aplicadas à mesma marca. O Unicode também contém versões pré-compiladas da maioria dessas combinações para uso normal.

Algumas seqüências de caracteres também podem ser representadas como um único caractere chamado de caráter pré-composto, também conhecido como caráter composto. Por exemplo, o caractere [ü] pode ser codificado como o único ponto de código U + 00FC ou como o caractere base U + 0075 (u), seguido pelo caractere não independente U + 0308 (¨). O padrão Unicode codifica caracteres compostos para compatibilidade com padrões estabelecidos, como o Latim 1, que inclui muitos caracteres compostos, como [ü] e [ñ].

Caracteres compostos podem ser expandidos para consistência ou análise. Por exemplo, ao classificar em ordem alfabética, o símbolo [ü] pode ser decomposto em [u] seguido pelo símbolo não independente [¨]. Após essa decomposição, o algoritmo fica mais fácil de trabalhar com uma sequência de caracteres. Isso facilita a classificação em idiomas onde os modificadores de caracteres não afetam a ordem alfabética. O padrão Unicode define a ordem de decomposição para todos os caracteres compostos. Ele também define formas de normalização para fornecer representações exclusivas de caracteres.

Mitos Unicode


Dos slides da apresentação de Mark Davis "Mitos do Unicode" .

  • Unicode é apenas um código de 16 bits . - Algumas pessoas acreditam erroneamente que Unicode é apenas um código de 16 bits, no qual cada caractere ocupa 16 bits e, portanto, existem 65.536 caracteres possíveis. De fato, isso não é inteiramente verdade. Esse é o mito Unicode mais comum; portanto, se você também pensava assim antes, não desanime.
  • Você pode usar qualquer ponto de código que não seja usado para suas necessidades . - não. Algum dia, este lugar será substituído por outro símbolo. Em vez disso, use aviões para uso particular ou áreas sem caracteres em cada plano onde não haverá caracteres por padrão.
  • Cada ponto de código Unicode representa um caractere . - não. Existem muitos pontos sem caracteres (FFFE, FFFF, 1FFFE etc.) Além disso, pontos de código substitutos, pontos de código privados e não utilizados, além de "caracteres" de controle / formatação (RLM, ZWNJ, etc.)
  • O Unicode fica sem espaço . - Se preenchesse linearmente, terminaria em 2140. Mas o local não preenche linearmente. Planos futuros ver aqui .
  • Todos os caracteres são correspondidos um a um . - não. As opções são:
    • Um para muitos: (β → SS)
    • Dado o contexto: (... Σ ← → ... ς e ao mesmo tempo ... ΣΤ ... ← → ... στ ...)
    • Com base na localidade: (I ← → ı e ao mesmo tempo İ ← → i)

Codificações de aplicativos Unicode


Tipo de codificaçãoExemplo
Objeto HTML (decimal)
Objeto HTML (hex)
Código de controle de URL% F0% 9F% 96% 96
UTF-8 (hex)0xF0 0x9F 0x96 0x96 (f09f9696)
UTF-8 (binário)11110000: 10011111: 10010110: 10010110
UTF-16 / UTF-16BE (hex)0xD83D 0xDD96 (d83ddd96)
UTF-16LE (hex)0x3DD8 0x96DD (3dd896dd)
UTF-32 / UTF-32BE (hex)0x0001F596 (0001f596)
UTF-32LE (hex)0x96F50100 (96f50100)
Sequência de escape octal\ 360 \ 237 \ 226 \ 226

Código fonte


Tipo de codificaçãoExemplo
Javascript\ u1F596
Json\ u1F596
C\ u1F596
C ++\ u1F596
Java\ u1F596
Python\ u1F596
Perl\ x {1F596}
Ruby\ u {1F596}
CSS\ 01F596

Lista de personagens incríveis.



Compartilhar um documento pode transformar rapidamente a edição em uma batalha de rap escrita, travada por um arranjo cada vez mais confuso de gerentes de U + 202a a U + 202e

Caracteres especiais


O Unicode Consortium publicou um diagrama de pontuação geral, onde você pode encontrar mais informações.

SímboloTítuloDescrição do produto
''U + FEFF Espaço sem quebra de largura zero (Byte Order Mark - BOM)Possui uma propriedade importante de exclusividade ao alterar a ordem dos bytes. Ele também tem largura e invisibilidade zero. Em software inadequado (como um intérprete PHP), isso leva a todos os tipos de exemplos de comportamento divertido.
'￯'BOM reversa '\ uFFEF'Não é equiparado a um caractere, exceto no início do texto.
'​''\ u200B' Espaço sem quebra de largura zeroUm símbolo sem aparência e sem efeito, exceto para impedir a formação de ligaduras.
' 'U + 00A0 Espaço sem quebraFaz com que os caracteres adjacentes fiquem juntos. Bem conhecido como   em HTML.
''U + 00AD Hífen suaveNo HTML, ele funciona como um espaço de largura zero, mas quando encontra o final de uma linha (e somente neste caso) mostra um hífen.
'‍'Sinal de largura zero U + 200D (com união)Faz com que caracteres vizinhos se conectem (por exemplo, caracteres árabes ou emojis suportados). Pode ser usado para emojis combinados sequencialmente.
'⁠'Conector do Word U + 2060O mesmo que U + 00A0, mas completamente invisível. Bom para @ font-face no Twitter.
' 'Caráter espacial U + 1680 OghamMarca um espaço que parece um traço. Ótimo para aproximar os programadores da loucura: 1 + 2 === 3.
';'U + 037E ponto de interrogação gregoParece um ponto e vírgula. Também é uma maneira divertida de trollar desenvolvedores.
'‭'U + 202DAltera a direção do texto da esquerda para a direita.
'‮'U + 202EAltera a direção do texto da direita para a esquerda.
'ꓸ'Tom de letra U + A4F8 Lisu mya tiDobro para o ponto.
'ꓹ'Tom de letra U + A4F9 Lisu poDuplo para vírgula.
'ꓼ'Tom de letra U + A4FC Lisu agoraDuplo para ponto e vírgula.
'ꓽ'Tom de letra U + A4FD Lisu mya jeuDuplo para o cólon.
'︀'Seletores de opção (de U + FE00 a U + FE0F e de U + E0100 a U + E01EF)Um bloco de 256 caracteres de largura zero que possui a propriedade ID_Continue, ou seja, pode ser usado em nomes de variáveis ​​(não na primeira letra). O que os torna especiais é que o cursor do mouse passa sobre eles, porque eles combinam caracteres, ao contrário da maioria dos outros caracteres de largura zero.
'ᅟ'Espaço reservado para U + 115F Hangul ChosonEssencialmente, preenche o espaço. Renderizado como um caractere de largura zero (invisível), a menos que seja explicitamente suportado na renderização. Marcado como ID_Start
'ᅠ'Espaço reservado para U + 1160 ChunsonTalvez preenche o espaço? Renderizado como um caractere de largura zero (invisível), a menos que seja explicitamente suportado na renderização. Marcado como ID_Start
'ㅤ'Agregado Hangul U + 3164Em geral, preenche o espaço. Renderizado como um caractere de largura zero (invisível), a menos que seja explicitamente suportado na renderização. Marcado como ID_Start

Espere ... o que eu acabei de ler?

Identificadores variáveis ​​podem incluir espaços!


O espaço reservado U + 3164 Hangul é exibido como um espaço amplo. Se o caractere não for claramente suportado na renderização , ele será exibido como completamente invisível (e não ocupa espaço, ou seja, "largura zero"). Isso significa que você nunca verá um caractere de substituição de caractere feio ( ).

Ainda não sei ao certo por que o U + 3164 é instruído a se comportar dessa maneira. Curiosamente, o U + 3164 foi adicionado ao Unicode na versão 1.1 (1993) - então os especialistas do Consortium tiveram muito tempo para pensar sobre isso. De qualquer forma, aqui estão alguns exemplos.

 > var ᅟ = 'foo'; undefined > ᅟ 'foo' > var ㅤ= alert; undefined > var foo = 'bar' undefined > if ( foo ===ㅤ`baz` ){} // alert undefined > var varㅤfooㅤ\u{A60C}ㅤπ = 'bar'; undefined > varㅤfooㅤꘌㅤπ 'bar' 

** Nota: ** Testei a renderização U + 3164 no Ubuntu e OS X com os seguintes parâmetros: `node`,` php`, `ruby`,` python3.5`, `scala`,` vim`, `cat` , `chrome` +` github gist '. Atom é o único sistema que falha ao exibir incorretamente campos vazios. Ainda tenho que verificar o código no Emacs e Sublime. Pelo que entendi, o Unicode Consortium não irá reatribuir ou renomear caracteres ou pontos de código, mas pode ser persuadido a alterar as propriedades de caracteres, como ID_Start e ID_Continue.

Modificadores


O Zero Width Combiner (ZWJ) é um caractere não imprimível em um conjunto de computadores de algumas fontes complexas, como árabe ou qualquer fonte indiana. Quando colocado entre dois caracteres que não estariam conectados, o ZWJ os obriga a imprimir de forma combinada.

O desconector de largura zero (ZWNJ) é um caractere não imprimível em conjuntos de gravação baseados em computador com ligaduras. Quando colocados entre dois caracteres que de outra forma seriam unidos a uma ligadura, o ZWNJ os obriga a imprimir em suas formas final e original, respectivamente. Atua como um espaço, mas é usado quando é desejável manter as palavras próximas umas das outras ou combinar uma palavra com seu morfema.

 > 'a' "a" > 'a\u{0308}' "ä" > 'a\u{20DE}\u{0308}' "a⃞̈" > 'a\u{20DE}\u{0308}\u{20DD}' "a⃞̈⃝" // Modifying Invisible Characters > '\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}' "‎‎‎‎‎‎‎‎‎‎" > '\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}\u{200E}'.length 10 

Colisões de transformação em maiúsculas


SímboloPonto de códigoResultado
ß0x00DFSS
ı0x0131I
ſ0x017FS
0xFB00FF
fi0xFB01FI
fl0xFB02FL
0xFB03FFI
0xFB04FFL
0xFB05ST
0xFB06ST

Colisões de conversão em minúsculas


SímboloPonto de códigoResultado
K0x212Ak

Peculiaridades e solução de problemas


  • O comprimento da linha geralmente é determinado pelo número de pontos de código . Isso significa que pares substitutos serão considerados dois caracteres. Vários diacríticos podem ser sobrepostos a um símbolo: a + ̈ == ̈a . Isso aumenta o comprimento da cadeia, produzindo apenas um caractere.
  • Da mesma forma, a inversão de string geralmente se torna uma tarefa não trivial . Novamente, pares substitutos e diacríticos devem ser revertidos juntos. O ES Reverser oferece uma solução muito boa.
  • As comparações em maiúsculas e minúsculas nem sempre correspondem . Eles podem ser expressos em tais relacionamentos:

    • Um para muitos: (ß → SS)
    • Dado o contexto: (... Σ ← → ... ς e ... ΣΤ ... ← → ... στ ...)
    • Com base na localidade: (I ← → ı e İ ← → i)

    Uma para muitas comparações


    A maioria dos caracteres abaixo expressa seus mapeamentos um para muitos em letras maiúsculas e outros em letras minúsculas. Em princípio, a lista pode ser dividida em duas partes.

    Ponto de códigoSímboloTítuloCaráter associadoPontos de código associados
    U + 00DFßEsceto latino minúsculo (S agudo)s , sU + 0073, U + 0073
    U + 0130İLetra maiúscula latina "I" com um ponto acimai ̇U + 0069, U + 0307
    U + 0149ʼnLetra minúscula latina "n" do apóstrofo anteriorʼ , nU + 02BC, U + 006E
    U + 01F0ǰLetra minúscula latina jj , ̌U + 006A, U + 030C
    U + 0390ΐIota minúscula grega com diálise e tonos.ι , ̈U + 03B9, U + 0308, U + 0301
    U + 03B0ΰLetra minúscula grega ipsilon com diálise e tonos.̈ ,U + 03C5, U + 0308, U + 0301
    U + 0587ևLigadura minúscula armênia ech yiwnե , ւU + 0565, U + 0582
    U + 1E96Letra minúscula latina h com uma linha abaixohU + 0068, U + 0331
    U + 1E97Letra minúscula latina t com déresist , ̈U + 0074, U + 0308
    U + 1E98Letra minúscula latina w com anel acimaw , ̊U + 0077, U + 030A
    U + 1E99Letra minúscula latina y com anel acimay ̊U + 0079, U + 030A
    U + 1E9ALetra minúscula latina a com metade direita do anela , ʾU + 0061, U + 02BE
    U + 1E9EMaiúscula latina aguda ss , sU + 0073, U + 0073
    U + 1F50Letra minúscula grega ipsilon com psilυ ,U + 03C5, U + 0313
    U + 1F52Letra minúscula grega ipsilon com psili e varia̓ ,U + 03C5, U + 0313, U + 0300
    U + 1F54Letra minúscula grega ipsilon com psily e oxy̓ ,U + 03C5, U + 0313, U + 0301
    U + 1F56Letra minúscula grega ipsilon com psily e perisome̓ ,U + 03C5, U + 0313, U + 0342
    U + 1F80Letra minúscula grega alfa com psili e ipogemen , ιU + 1F00, U + 03B9
    U + 1F81Letra minúscula grega alfa com dasia e ipogemen , ιU + 1F01, U + 03B9
    U + 1F82Letra minúscula grega alfa com psilia e varia e ipogemen , ιU + 1F02, U + 03B9
    U + 1F83Letra minúscula grega alfa com dasia e varia e ipogemen , ιU + 1F03, U + 03B9
    U + 1F84Letra minúscula grega alfa com psily e oxy e ipogemen , ιU + 1F04, U + 03B9
    U + 1F85Letra minúscula grega alfa com dasia e oxy e ipogemen , ιU + 1F05, U + 03B9
    U + 1F86Letra minúscula grega alfa com psily e perispomenti e ipogemen , ιU + 1F06, U + 03B9
    U + 1F87Letra minúscula grega alfa com dasia e perispomenti e hypogrammen , ιU + 1F07, U + 03B9
    U + 1F88Letra maiúscula grega alfa com psil e programmemen , ιU + 1F00, U + 03B9
    U + 1F89Letra maiúscula grega alfa com dasia e programmemen , ιU + 1F01, U + 03B9
    U + 1F8ALetra maiúscula grega alfa com psilia e varia e programas , ιU + 1F02, U + 03B9
    U + 1F8BLetra maiúscula grega alfa com dasia e varia e prog , ιU + 1F03, U + 03B9
    U + 1F8CLetra maiúscula grega alfa com psily e oxy e prog , ιU + 1F04, U + 03B9
    U + 1F8DLetra maiúscula grega alfa com dasia e oxy e programmemen , ιU + 1F05, U + 03B9
    U + 1F8ELetra maiúscula grega alfa com psily e perispomenti e programmemeny , ιU + 1F06, U + 03B9
    U + 1F8FLetra maiúscula grega alfa com dasia e perispomenti e progs , ιU + 1F07, U + 03B9
    U + 1F90Letra minúscula grega isto com psily e ipogemen , ιU + 1F20, U + 03B9
    U + 1F91Letra minúscula grega a com dasia e ipogemen , ιU + 1F21, U + 03B9
    U + 1F92Letra minúscula grega isso com psilia e varia e ipogemen , ιU + 1F22, U + 03B9
    U + 1F93Letra minúscula grega eta com dasia e varia e ipogemen , ιU + 1F23, U + 03B9
    U + 1F94Letra minúscula grega a com psilia e oksia e ipogemen , ιU + 1F24, U + 03B9
    U + 1F95Letra minúscula grega eta com dasia e oksia e ipogemen , ιU + 1F25, U + 03B9
    U + 1F96Letra minúscula grega isso com psily e perispomenti e ipogemen , ιU + 1F26, U + 03B9
    U + 1F97Letra minúscula grega eta com dasia e perisopmenti e hypogrammen , ιU + 1F27, U + 03B9
    U + 1F98Letra maiúscula grega com psilah e programas , ιU + 1F20, U + 03B9
    U + 1F99Letra maiúscula grega com dasia e programadores , ιU + 1F21, U + 03B9
    U + 1F9AMaiúscula grega isso com psilia e varia e prosgrammemeny , ιU + 1F22, U + 03B9
    U + 1F9BMaiúscula grega isso com dasia e varia e prosgrammemeny , ιU + 1F23, U + 03B9
    U + 1F9CMaiúscula grega isso com psilia e oxy e programadores , ιU + 1F24, U + 03B9
    U + 1F9DLetra maiúscula grega com dasia e oksia e programadores , ιU + 1F25, U + 03B9
    U + 1F9EMaiúscula grega isso com psily e perispomenty e prosgrammeny , ιU + 1F26, U + 03B9
    U + 1F9FLetra maiúscula grega com dasia e perispomenti e programadores , ιU + 1F27, U + 03B9
    U + 1FA0Omega letra minúscula grega com psili e ipogemen , ιU + 1F60, U + 03B9
    U + 1FA1Omega letra minúscula grega com dasia e ipogemen , ιU + 1F61, U + 03B9
    U + 1FA2Ômega minúscula da letra grega com psilia e varia e ipogemen , ιU + 1F62, U + 03B9
    U + 1FA3Letra minúscula grega ômega com dasia e varia e ipogemen , ιU + 1F63, U + 03B9
    U + 1FA4Ômega letra minúscula grega com psily e oxy e ipogemen , ιU + 1F64, U + 03B9
    U + 1FA5Letra minúscula grega ômega com dasia e oxy e ipogemen , ιU + 1F65, U + 03B9
    U + 1FA6Ômega letra minúscula grega com psily e perispomenti e ipogemen , ιU + 1F66, U + 03B9
    U + 1FA7Letra minúscula grega ômega com dasia e perispomenti e hypogrammemen , ιU + 1F67, U + 03B9
    U + 1FA8Letra maiúscula grega ômega com psili e programa , ιU + 1F60, U + 03B9
    U + 1FA9Letra maiúscula grega Omega com dasia e programmemen , ιU + 1F61, U + 03B9
    U + 1FAALetra maiúscula grega ômega com psilia e varia e prosgrammemeny , ιU + 1F62, U + 03B9
    U + 1FABLetra maiúscula grega Omega com dasia e varia e programmemen , ιU + 1F63, U + 03B9
    U + 1FACLetra maiúscula grega ômega com psilia e oxy e progamemen , ιU + 1F64, U + 03B9
    U + 1FADLetra maiúscula grega ômega com dasia e oksia e programmemen , ιU + 1F65, U + 03B9
    U + 1FAELetra maiúscula grega ômega com psily e perispomenti e prosgrammemeny , ιU + 1F66, U + 03B9
    U + 1FAFLetra maiúscula grega ômega com dasia e perispomenti e prosgrammemeny , ιU + 1F67, U + 03B9
    U + 1FB2Letra minúscula grega alfa com varia e ipogemen , ιU + 1F70, U + 03B9
    U + 1FB3Letra minúscula grega alfa com ogogerammeniα , ιU + 03B1, U + 03B9
    U + 1FB4Letra minúscula grega alfa com oxy e ipogemenά , ιU + 03AC, U + 03B9
    U + 1FB6Letra minúscula grega alfa com perispomentiα ,U + 03B1, U + 0342
    U + 1FB7Letra minúscula grega alfa com perispomenti e ipogemenα , ͂ ιU + 03B1, U + 0342, U + 03B9
    U + 1FBCLetra maiúscula grega alfa com progsα , ιU + 03B1, U + 03B9
    U + 1FC2Letra minúscula grega et com varia e ipogemen , ιU + 1F74, U + 03B9
    U + 1FC3Letra minúscula grega a com ipogemenη , ιU + 03B7, U + 03B9
    U + 1FC4Letra minúscula grega eta com oxy e ipogemenή , ιU + 03AE, U + 03B9
    U + 1FC6Letra minúscula grega a com perispomentiηU + 03B7, U + 0342
    U + 1FC7Letra minúscula grega a com perispomenti e ipogemenη , ͂ ιU + 03B7, U + 0342, U + 03B9
    U + 1FCCMaiúscula grega isso com progη , ιU + 03B7, U + 03B9
    U + 1FD2Iota minúscula grega com diálise e variabilidadeι , ̈U + 03B9, U + 0308, U + 0300
    U + 1FD3Iota minúscula grega com diálise e oxiι , ̈U + 03B9, U + 0308, U + 0301
    U + 1FD6Iota minúsculo grego com perispomentiιU + 03B9, U + 0342
    U + 1FD7Iota minúscula grega com diálise e períodoι , ̈U + 03B9, U + 0308, U + 0342
    U + 1FE2Letra minúscula grega ipsilon com diálise e varia.̈ ,U + 03C5, U + 0308, U + 0300
    U + 1FE3Letra minúscula grega ipsilon com diálise e oxi.̈ ,U + 03C5, U + 0308, U + 0301
    U + 1FE4Rho minúsculo grego com psiliρ , ̓U + 03C1, U + 0313
    U + 1FE6Letra minúscula grega ipsilon com perispomentiυU + 03C5, U + 0342
    U + 1FE7Letra minúscula grega ipsilon com diálise e períodö ,U + 03C5, U + 0308, U + 0342
    U + 1FF2Letra minúscula grega ômega com varia e ipogemen , ιU + 1F7C, U + 03B9
    U + 1FF3Letra minúscula grega omega com ogogerammeniω , ιU + 03C9, U + 03B9
    U + 1FF4Omega letra minúscula grega com oxia e ipogemenώ , ιU + 03CE, U + 03B9
    U + 1FF6Letra minúscula grega ômega com perispomentiωU + 03C9, U + 0342
    U + 1FF7Letra minúscula grega ômega com perispomenti e ipogemenω , ͂ ιU + 03C9, U + 0342, U + 03B9
    U + 1FFCLetra maiúscula grega Omega com programaω , ιU + 03C9, U + 03B9
    U + FB00Ligadura em minúscula latina Fff fU + 0066, U + 0066
    U + FB01Ligadura minúscula em latim FiiU + 0066, U + 0069
    U + FB02Ligadura em minúscula latina Flf lU + 0066, U + 006C
    U + FB03Ligadura em minúscula latina Ffif , iU + 0066, U + 0066, U + 0069
    U + FB04Ligadura em minúscula latina Fflf , f , lU + 0066, U + 0066, U + 006C
    U + FB05Ligadura minúscula em latim ST longos , tU + 0073, U + 0074
    U + FB06Ligadura latina minúscula Sts , tU + 0073, U + 0074
    U + FB13Ligadura minúscula armênia Men Nowմ , նU + 0574, U + 0576
    U + FB14Ligadura minúscula armênia Men Echմ , եU + 0574, U + 0565
    U + FB15Ligadura minúscula armênia Men Iniմ , իU + 0574, U + 056B
    U + FB16Ligadura minúscula da Armênia Vew Nowվ , նU + 057E, U + 0576
    U + FB17Ligadura minúscula armênia Men Xehմ , խU + 0574, U + 056D

    Ótimos pacotes e bibliotecas


    • PhantomScript -: ghost :: flashlight: Executando JavaScript invisível e engenharia social
    • ESReverser - manipulação de string JavaScript baseada em Unicode .
    • mimic - Uso indevido de Unicode
    • python-ftfy - tenta criar a máxima representação correta e completa do texto recebido no Unicode.
    • vim-troll-stopper - Proteja seu código contra trolls unicode.

    Emoji




    Unicode (diversity), . .

    , , . — . :

    U+1F469 U+200D U+2764 U+FE0F U+200D U+1F469️‍️‍️‍couple with heart: woman, woman
    U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F466

    , .

    8.0 ( 2015 ) - . , ( , FitzpatrickSkinType.pdf). .

    Unicode

    U+1F3FB-1-2
    U+1F3FC-3
    U+1F3FD-4
    U+1F3FE-5
    U+1F3FF-6

    , \u{1F466}\u{1F3FE} .


    +






    JavaScript (ES6)

    , ID_START , . , ID_CONTINUE , .

     // How convenient! var π = Math.PI; // Sometimes, you just have to use the Bad Parts of JavaScript: var ಠ_ಠ = eval; // Code, YU NO WORK?! var ლ_ಠ益ಠ_ლ = 42; // How about a JavaScript library for functional programming? var λ = function() {}; // Obfuscate boring variable names for great justice var \u006C\u006F\u006C\u0077\u0061\u0074 = 'heh'; // …or just make up random ones var Ꙭൽↈⴱ = 'huh'; // While perfectly valid, this doesn't work in most browsers: var foo\u200Cbar = 42; // This is *not* a bitwise left shift (`<<`): var 〱〱 = 2; // This is, though: 〱〱 << 〱〱; // 8 // Give yourself a discount: var price_9̶9̶_89 = 'cheap'; // Fun with Roman numerals var Ⅳ = 4; var Ⅴ = 5; Ⅳ + Ⅴ; // 9 // Cthulhu was here var Hͫ̆̒̐ͣ̊̄ͯ͗͏̵̗̻̰̠̬͝ͅE̴̷̬͎̱̘͇͍̾ͦ͊͒͊̓̓̐_̫̠̱̩̭̤͈̑̎̋ͮͩ̒͑̾͋͘Ç̳͕̯̭̱̲̣̠̜͋̍O̴̦̗̯̹̼ͭ̐ͨ̊̈͘͠M̶̝̠̭̭̤̻͓͑̓̊ͣͤ̎͟͠E̢̞̮̹͍̞̳̣ͣͪ͐̈T̡̯̳̭̜̠͕͌̈́̽̿ͤ̿̅̑Ḧ̱̱̺̰̳̹̘̰́̏ͪ̂̽͂̀͠ = 'Zalgo'; 

    CSS .

     <!-- place this within the document head --> <meta charset="UTF-8" /> <!-- error message --> <div class="ಠ_ಠ">You do not have access to this page.</div> <!-- success message --> <div class="">Your changes have been saved successfully!</div> 

     .ಠ_ಠ { border: 1px solid #f00; } . { background: lightgreen; } 

    HTML


    HTML- , , .

    , HTML .

     // U+1160 HANGUL JUNGSEONG FILLER transformAllTags('ᅠ'); // An actual HTML element node designed to look like a comment node, using the U+01C3 LATIN LETTER RETROFLEX CLICK // <ǃ-- name="viewport" content="width=device-width"></ǃ--> transformAllTags('ǃ--'); // or even <ᅠ⃝ transformAllTags('\u{1160}\u{20dd}'); // and for a bonus, all existing tag names will have each character ensquared. h⃞t⃞m⃞l⃞ transformAllTags(); function transformAllTags (newName){ // querySelectorAll doesn't actually return an array. Array.from(document.querySelectorAll('*')) .forEach(function(x){ transformTag(x, newName); }); } function wonky(str){ return str.split('').join('\u{20de}') + '\u{20de}'; } function transformTag(tagIdOrElem, tagType){ var elem = (tagIdOrElem instanceof HTMLElement) ? tagIdOrElem : document.getElementById(tagIdOrElem); if(!elem || !(elem instanceof HTMLElement))return; var children = elem.childNodes; var parent = elem.parentNode; var newNode = document.createElement(tagType||wonky(elem.tagName)); for(var a=0;a<elem.attributes.length;a++){ newNode.setAttribute(elem.attributes[a].nodeName, elem.attributes[a].value); } for(var i= 0,clen=children.length;i<clen;i++){ newNode.appendChild(children[0]); //0...always point to the first non-moved element } newNode.style.cssText = elem.style.cssText; parent.replaceChild(newNode,elem); } 

    :

     function testBegin(str){ try{ eval(`document.createElement( '${str}' );`) return true; } catch(e){ return false; } } function testContinue(str){ try{ eval(`document.createElement( 'a${str}' );`) return true; } catch(e){ return false; } } 

    :

     // Test if dashes can start an HTML Tag > testBegin('-') < false > testContinue('-') < true > testBegin('ᅠ-') // Prepend dash with U+1160 HANGUL JUNGSEONG FILLER < true 


    TrueType OpenType UTF-8, 65 535 . 1,1 UTF-8, .








    256 .



    , () (CJK). , , « ».


    . 17- .

    #
    U+0000U+007F128
    — 1U+0080U+00FF128
    — AU+0100U+017F128
    — BU+0180U+024F208
    U+0250U+02AF96
    U+02B0U+02FF80
    U+0300U+036F112
    U+0370U+03FF135
    U+0400U+04FF256
    U+0500U+052F48.
    U+0530U+058F89
    U+0590U+05FF87
    U+0600U+06FF255
    U+0700U+074F77
    U+0750U+077F48.
    U+0780U+07BF50.
    U+07C0U+07FF59.
    U+0800U+083F61
    U+0840U+085F29
    — AU+08A0U+08FF50.
    U+0900U+097F128
    U+0980U+09FF93
    U+0A00U+0A7F79
    U+0A80U+0AFF85
    U+0B00U+0B7F90
    U+0B80U+0BFF72
    U+0C00U+0C7F96
    U+0C80U+0CFF87
    U+0D00U+0D7F100
    U+0D80U+0DFF90
    U+0E00U+0E7F87
    U+0E80U+0EFF67
    U+0F00U+0FFF211
    U+1000U+109F160
    U+10A0U+10FF88
    U+1100U+11FF256
    U+1200U+137F358
    U+1380U+139F26
    U+13A0U+13FF92
    U+1400U+167F640
    U+1680U+169F29
    U+16A0U+16FF89
    U+1700U+171F20
    U+1720U+173F23
    U+1740U+175F20
    U+1760U+177F18
    U+1780U+17FF114
    U+1800U+18AF156
    U+18B0U+18FF70
    U+1900U+194F68
    U+1950U+197F35
    U+1980U+19DF83
    U+19E0U+19FF32.
    U+1A00U+1A1F30
    U+1A20U+1AAF127
    U+1AB0U+1AFF15
    U+1B00U+1B7F121
    U+1B80U+1BBF64
    U+1BC0U+1BFF56.
    U+1C00U+1C4F74
    -U+1C50U+1C7F48.
    U+1CC0U+1CCF8
    U+1CD0U+1CFF41.
    U+1D00U+1D7F128
    U+1D80U+1DBF64
    U+1DFFU+1DC0U+1DFF58.
    U+1E00U+1EFF256
    U+1F00U+1FFF233
    U+2000U+206F111
    U+2070U+209F42.
    U+20A0U+20CF31
    U+20D0U+20FF33
    U+2100U+214F80
    U+2150U+218F60
    U+2190U+21FF112
    U+2200U+22FF256
    U+2300U+23FF251
    U+2400U+243F39.
    U+2440U+245F11
    U+2460U+24FF160
    U+2500U+257F128
    U+2580U+259F32.
    U+25A0U+25FF96
    U+2600U+26FF256
    DingbatsU+2700U+27BF192
    — AU+27C0U+27EF48.
    — AU+27F0U+27FF16
    U+2800U+28FF256
    — BU+2900U+297F128
    — BU+2980U+29FF128
    U+2A00U+2AFF256
    U+2B00U+2BFF206
    U+2C00U+2C5F94
    — CU+2C60U+2C7F32.
    U+2C80U+2CFF123
    U+2D00U+2D2F40.
    U+2D30U+2D7F59.
    U+2D80U+2DDF79
    — AU+2DE0U+2DFF32.
    U+2E00U+2E7F67
    U+2E80U+2EFF115
    U+2F00U+2FDF214
    U+2FF0U+2FFF12
    U+3000U+303F64
    U+3040U+309F93
    U+30A0U+30FF96
    U+3100U+312F41.
    U+3130U+318F94
    U+3190U+319F16
    U+31A0U+31BF27
    U+31C0U+31EF36.
    U+31F0U+31FF16
    U+3200U+32FF254
    U+3300U+33FF256
    — AU+3400U+4DBF6191
    « »U+4DC0U+4DFF64
    U+4E00U+9FFF20941
    U+A000U+A48F1165
    U+A490U+A4CF55
    U+A4D0U+A4FF48.
    U+A500U+A63F300
    — BU+A640U+A69F96
    U+A6A0U+A6FF88
    U+A700U+A71F32.
    — DU+A720U+A7FF159
    U+A800U+A82F44
    U+A830U+A83F10
    U+A840U+A87F56.
    U+A880U+A8DF81
    U+A8E0U+A8FF30
    -U+A900U+A92F48.
    U+A930U+A95F37
    — AU+A960U+A97F29
    U+A980U+A9DF91
    — BU+A9E0U+A9FF31
    U+AA00U+AA5F83
    — AU+AA60U+AA7F32.
    -U+AA80U+AADF72
    U+AAE0U+AAFF23
    — AU+AB00U+AB2F32.
    — EU+AB30U+AB6F54
    U+AB70U+ABBF80
    U+ABC0U+ABFF56.
    U+AC00U+D7AF2
    — BU+D7B0U+D7FF72
    U+D800U+DB7F2
    U+DB80U+DBFF2
    U+DC00U+DFFF2
    U+E000U+F8FF2
    U+F900U+FAFF472
    U+FB00U+FB4F58.
    — AU+FB50U+FDFF643
    U+FE00U+FE0F16
    U+FE10U+FE1F10
    U+FE20U+FE2F16
    U+FE30U+FE4F32.
    U+FE50U+FE6F26
    — BU+FE70U+FEFF141
    U+FF00U+FFEF225
    Caracteres especiaisU+FFF0U+FFFF7
    U+10000U+1007F88
    U+10080U+100FF123
    U+10100U+1013F57
    U+10140U+1018F77
    U+10190U+101CF13
    U+101D0U+101FF46.
    U+10280U+1029F29
    U+102A0U+102DF49.
    U+102E0U+102FF28.
    U+10300U+1032F36.
    U+10330U+1034F27
    U+10350U+1037F43
    U+10380U+1039F31
    U+103A0U+103DF50.
    U+10400U+1044F80
    U+10450U+1047F48.
    U+10480U+104AF40.
    U+10500U+1052F40.
    U+10530U+1056F53
    U+10600U+1077F341
    U+10800U+1083F55
    U+10840U+1085F31
    U+10860U+1087F32.
    U+10880U+108AF40.
    U+108E0U+108FF26
    U+10900U+1091F29
    U+10920U+1093F27
    U+10980U+1099F32.
    U+109A0U+109FF90
    U+10A00U+10A5F65
    U+10A60U+10A7F32.
    U+10A80U+10A9F32.
    U+10AC0U+10AFF51
    U+10B00U+10B3F61
    U+10B40U+10B5F30
    U+10B60U+10B7F27
    U+10B80U+10BAF29
    U+10C00U+10C4F73
    U+10C80U+10CFF108
    U+10E60U+10E7F31
    U+11000U+1107F109
    U+11080U+110CF66
    -U+110D0U+110FF35
    U+11100U+1114F67
    U+11150U+1117F39.
    U+11180U+111DF94
    U+111E0U+111FF20
    U+11200U+1124F61
    U+11280U+112AF38.
    U+112B0U+112FF69
    U+11300U+1137F85
    U+11480U+114DF82
    U+11580U+115FF92
    U+11600U+1165F79
    U+11680U+116CF66
    U+11700U+1173F57
    -U+118A0U+118FF84
    U+11AC0U+11AFF57
    U+12000U+123FF922
    U+12400U+1247F116
    U+12480U+1254F196
    U+13000U+1342F1071
    U+14400U+1467F583
    U+16800U+16A3F569
    U+16A40U+16A6F43
    U+16AD0U+16AFF36.
    U+16B00U+16B8F127
    U+16F00U+16F9F133
    U+1B000U+1B0FF2
    U+1BC00U+1BC9F143
    U+1BCA0U+1BCAF4
    U+1D000U+1D0FF246
    U+1D100U+1D1FF231
    U+1D200U+1D24F70
    « »U+1D300U+1D35F87
    U+1D360U+1D37F18
    U+1D400U+1D7FF996
    SignWritingU+1D800U+1DAAF672
    U+1E800U+1E8DF213
    U+1EE00U+1EEFF143
    U+1F000U+1F02F44
    U+1F030U+1F09F100
    U+1F0A0U+1F0FF82
    U+1F100U+1F1FF173
    U+1F200U+1F2FF57
    U+1F300U+1F5FF766
    U+1F600U+1F64F80
    U+1F650U+1F67F48.
    U+1F680U+1F6FF98
    U+1F700U+1F77F116
    U+1F780U+1F7FF85
    — CU+1F800U+1F8FF148
    U+1F900U+1F9FF15
    — BU+20000U+2A6DF42676
    — CU+2A700U+2B73F60
    — DU+2B740U+2B81F27
    — EU+2B820U+2CEAF2
    U+2F800U+2FA1F542
    TagsU+E0000U+E007F97
    U+E0100U+E01EF240
    — AU+F0000U+FFFFF4
    — BU+100000U+10FFFF4


    :

    • — - .
    • — , .
    • — .
    • — , . .
    • , — , . , .
    • — , . , [Ä] [A] [¨].
    • — .
    • — , , . .
    • — , .
    • — .

    : c codepoints.net .


Source: https://habr.com/ru/post/pt485148/


All Articles