Questão Por que não devo usar caracteres Unicode para simular estilos tipográficos (como letras maiúsculas ou script)?


Unicode contém vários caracteres que se parecem com variantes de caracteres tipográficos do alfabeto latino básico e que permitem escrever textos nos estilos tipográficos correspondentes sem recorrer a mark-up ou similar. Por exemplo, pode-se simular:

  • Bonés pequenos:

    ᴇɴᴄᴏᴅᴇᴅ ᴛʜɪꜱ ꜰᴀɴᴄɪʟy ᴇɴᴄᴏᴅᴇᴅ ᴛᴇxᴛ.

  • Roteiro:

    𝓑𝓮𝓱𝓸𝓵𝓭 𝓽𝓱𝓲𝓼 𝓯𝓪𝓷𝓬𝓲𝓵𝔂 𝓮𝓷𝓬𝓸𝓭𝓮𝓭 𝓽𝓮𝔁𝓽.

  • Carta de Apresentação:

    𝕭𝖊𝖍𝖔𝖑𝖉 𝖙𝖍𝖎𝖘 𝖋𝖆𝖓𝖈𝖎𝖑𝖞 𝖊𝖓𝖈𝖔𝖉𝖊𝖉 𝖙𝖊𝖝𝖙.

Isso atendeu aos interesses da Stack Exchange (por exemplo, Aqui, Aquie Aqui) e críticas de tais técnicas foram feitas. Mas o que pode dar errado quando eu os uso?


123


origem


Estou lendo isso do meu telefone e não consigo ver os dois últimos textos extravagantes. - Scimonster
Porque é ilegível em alguns dispositivos: i.stack.imgur.com/kM73J.png - Chris Kent
Como alguns de nós querem ver páginas da Web naquilo que consideramos ser fontes legíveis (e tamanhos, cores, & c), usamos, por exemplo, folhas de estilo CSS do usuário para substituir estilos de autor. Você pode notar que, embora seus três exemplos sejam exibidos no meu dispositivo, aparentemente, da mesma forma que você pretende que eles apareçam, para mim eles são apenas legíveis. Por que você colocaria seus desejos artísticos acima da facilidade de leitura dos seus leitores? - jamesqf
Aqui está uma observação interessante: o Edge não consegue encontrar texto nos últimos dois exemplos e o Chrome não consegue encontrar texto no primeiro. (Tente Ctrl + F'ing para BEHOLD em ambos os navegadores.) Ainda não marquei o Firefox. - Schism
@Schism Firefox não encontra nenhum deles. Parece que o Chrome provavelmente usa a normalização NFKC / NFKD antes da pesquisa, que decompõe o texto do script e do boletim informativo para o Latim básico. O Firefox não parece fazer isso. Edge ... está fazendo algo estranho. - Bob


Respostas:


Geral

Esses caracteres não se destinam ao texto regular do alfabeto latino, mas à fonética, texto em alfabeto cirílico, para uso como símbolos matemáticos (representando variáveis) ou semelhantes. A única maneira compatível com Unicode de codificar o texto no alfabeto latino básico é usar os caracteres predominantemente usados ​​para essa finalidade (ou seja, do Latim Básico Bloco Unicode).

Como acontece com muitos outros padrões, você deve pensar duas vezes antes de violar o Unicode. Além disso, o Unicode compreende muitos sistemas de escrita, casos de uso e coisas que existem apenas para compatibilidade com outros padrões.1 compreender plenamente todas as suas motivações é uma ciência própria. Longa história curta, a menos que você realmente saiba o que está fazendo, é extremamente provável que algo quebras e que você nem tenha pensado remotamente.

Exemplos específicos

Acessibilidade

O texto codificado não existe apenas para ser renderizado em alguma fonte. Também pode ser interpretado, por exemplo, por leitores de tela. E um leitor de tela não precisa adivinhar se

𝓽𝓱𝓮

destina-se a ser o artigo definido ou o produto matemático2 das variáveis ​​𝓽, 𝓱 e 𝓮 - para as quais esses caracteres são feitos. O melhor comportamento será, portanto, que explique estes caracteres, e. dizendo literalmente o seguinte:

roteiro negrito pequeno t, pequeno roteiro negrito h, pequeno roteiro ousado

Não deveria simplesmente dizer "o" em vez disso porque então não leria corretamente textos matemáticos cujos símbolos por acaso formariam uma palavra pronunciável.3

Portabilidade

Se o seu texto for bem renderizado em sua máquina, isso não significa que ele também estará no do leitor. O exemplo mais óbvio é que o leitor não tem nenhuma fonte que suporte esses caracteres ou o texto é processado por um software que não suporta fontes substitutas. Evidentemente, isso está se tornando cada vez menos comum. Tenha em mente que algumas pessoas, como os disléxicos, precisam de fontes especiais que são menos propensas a suportar esses caracteres.

Mas mesmo que a máquina do leitor use apenas uma fonte diferente, isso pode tornar o texto consideravelmente menos legível. Para primeiro exemplo, isso é 𝓉𝒽ℯ renderizado com duas fontes diferentes:

𝓉𝒽ℯ rendered with FreeSerif and STIX

Serif gratuito renderiza o texto como você provavelmente deseja que ele seja renderizado ao usar caracteres especiais para simular texto, ou seja, simular manuscrito com um traçado contínuo. No entanto, esses caracteres são feitos para uso como símbolos matemáticos, conectando o que não faz sentido. Daí a renderização por STIX, que é projetado especificamente para fins matemáticos, está mais de acordo com a forma como esses caracteres devem ser usados.

Em um segundo exemplo, suponha que você ou o leitor em itálico "сᴜт мy" por algum motivo. Com uma boa fonte, você terá4:

сᴜт мy вᴀʀ rendered in upright and italics. italics reads as "cum my bar"

A razão para isto é que as small caps foram (parcialmente) simuladas com letras cirílicas, e O itálico cirílico às vezes parece muito diferente de suas contrapartes verticais. Então, novamente, este é o comportamento adequado.

Searchability

Como um primeiro exemplo, considere o que você gostaria que uma pesquisa razoável fizesse com o caractere 𝒲 (script matemático W). Suponha que a pesquisa tenha dois modos, o modo padrão e a modo exato (geralmente chamado maiúsculas e minúsculas). Este personagem deve ser:

  • encontrado ao procurar W ou W no modo padrão - para aqueles que não querem se incomodar em inserir ou copiar e colar o caractere especial no campo de pesquisa;

  • encontrado ao procurar por 𝒲 no modo exato - para aqueles que querem pesquisar onde a variável correspondente é mencionada em um documento matemático³;

  • não encontrado ao procurar por 𝓌, W ou W no modo exato por conta de quebrar uma pesquisa semelhante ao acima.

No entanto, se você usar esse caractere para simular o texto normal, ele deverá ser encontrado ao procurar W ou 𝒲 no modo exato, que está em conflito com o acima.

Como um segundo exemplo considere que os caracteres cirílicos nunca devem ser encontrados quando procurar caracteres latinos e vice-versa, pois eles são coisas completamente diferentes. No entanto, se usar caracteres cirílicos para simular letras maiúsculas em latim, será necessário que isso aconteça, se você não quiser que a capacidade de pesquisa seja quebrada. Isso levaria as pessoas a encontrarem muitas coisas inúteis se procurassem uma palavra rara de alfabeto latino que correspondesse às falsas maiúsculas de alguma palavra popular do alfabeto cirílico (e vice-versa).

Uma opção de pesquisa exata não pode resolver esse problema, pois isso é reservado para outras finalidades nesses alfabetos.

Em geral, é impossível construir uma pesquisa (sem uma quantidade insana de opções) que não seja quebrada usando caracteres especiais para simular texto em estilo latino.


1Você sabe que XKCD sobre o inevitável fracasso dos padrões unificadores? Bem, Unicode teve sucesso.
2ou qualquer que seja o operador vazio na convenção pertinente
3Estou ciente de que pouquíssimos textos matemáticos hoje em dia suportam essa codificação ou algo compatível, mas o ponto é que algum dia eles o farão. Seu texto abusivo de Unicode ainda pode estar ao redor e ler então.
4A menos que você esteja localizando para macedônio ou sérvio, no qual você obterá resultados diferentes, mas ainda assim indesejáveis.


220



Comentários não são para discussão extensa; esta conversa foi mudou-se para conversar. - Journeyman Geek♦
E quanto ao terceiro exemplo? Por que o texto do boletim informativo existe em Unicode versus apenas alguma fonte? - posfan12
@ posfan12: É usado como um alfabeto matemático distinto - como os caracteres do script. (Observe que o exemplo de numeração aqui não tem nada a ver com os pontos na pergunta.) - Wrzlprmft
Seu exemplo de cpas pequenos sugere um quebra-cabeça / competição: Encontre uma sentença válida que se torne uma sentença diferente quando em itálico ... (ambos interpretados por leitores humanos baseados no latim, digamos) - Hagen von Eitzen


O que pode dar errado? Bem, eu vejo isso:

enter image description here

no Firefox 50.1.0 no Windows 7.

O problema de glifos ausentes, neste caso, em um dispositivo móvel, é ilustrado em uma imagem dada pelo usuário Chris Kent dentro um comentário, que eu recortei e redimensionei o original:

enter image description here

E usuário oals gentilmente contribuído outro exemplo:

enter image description here


66



Eu? i.stack.imgur.com/lWRAa.png - oals
@Lilienthal Estou impressionado com quantos anos você deve ter ido sem verificar ou instalar atualizações. Quero dizer, eu ainda estou usando algo baseado no Firefox 3.5 em alguns dispositivos, mas eu não tenho exatamente uma escolha no assunto (dispositivo muito bom, mas nenhum navegador utilizável mais novo está disponível) - mtraceur
@Lilienthal Em algum momento de 2020, os números das versões principais do Firefox podem exigir números de 64 bits. Pouco depois disso, o número da versão ocupará mais espaço do que o programa real. Em uma tentativa de recuperar participação de mercado, os números de versão do Chrome precisarão de planetas inteiros para armazená-los. - Andrew Morton
Vocês têm alguma ideia de quantas vulnerabilidades de segurança conhecidas e ativas você está se expondo usando esses navegadores antigos? - Zach Lipton
@Zach Lipton: Você percebe que está na lista das minhas prioridades? # 1 é ter algo que eu possa realmente usar. Embora talvez o pessoal do Firefox (e muitos outros) tenha adotado um novo paradigma: segurança por meio da inutilidade. - jamesqf


Estou tendo um problema XY com isso.

Y and X appear smaller than the rest of the text

Aqui, vemos que Y e X parecem menores que o restante do texto. Em determinados níveis de zoom, eles parecem ter o mesmo tamanho, mas isso parece ter exposto um problema com esses glifos específicos nessa fonte específica.


28



Eu posso oferecer três explicações possíveis para o que você está vendo: 1) Ruim insinuando. 2) Uma fonte de fallback é usada para tudo, mas x e y. 3) Design de fonte incorreto: As maiúsculas foram projetadas para serem ligeiramente maiores que as letras minúsculas (que é uma opção válida) e usadas para caracteres fonéticos e cirílicos Unicode - o que não é uma boa escolha porque, por exemplo, no uso fonético, esses caracteres tem que harmonizar com caracteres latinos básicos. - De qualquer forma: os pontos 1) e 3) não são devidos a abuso do Unicode. O ponto 2) já foi abordado nas outras respostas. - Wrzlprmft
@Wrzlprmft: Por definição, eles são um abuso unicode, porque o unicode não possui small caps. O que unicode tem são letras que parecem pequenas maiúsculas nos blocos de alfabetos fonéticos e no bloco Latino Extended-D. Especificamente, nem os dois blocos fonéticos nem o bloco Latino Extended-D contêm a letra que se parece com small caps X, portanto, meu palpite é que o X vem de outro lugar, provavelmente do bloco cirílico. A diferença não é causada por nem 1, 2 nem 3. É causada pela letra pertencente a outro alfabeto. - slebetman
@slebetman: As pequenas maiúsculas x é apenas uma minúscula normal x (você pode simplesmente copiar o personagem da pergunta e inspecioná-lo). E uma minúscula x tem que se harmonizar com os caracteres fonéticos, porque também é usado como um caráter fonético. Ele também deve ter a mesma altura que os caracteres minúsculos cirílicos, já que você não deseja que as únicas palavras cirílicas se destaquem do texto latino (e vice-versa). - Wrzlprmft
Votado para o lol em "XY problem" :) - Andrew Morton


Usar caracteres não-latinos que pareçam um pouco latinos coloca você na companhia de spammers, vendedores de pornografia e dissimulados who-know-what-they-up-to que querem seu texto insolúvel, inexequível e repudiável. ("Eu nunca disse que era seguro !! Eu disse que era sigma-alfa-integral-sign-epislon !!! Não pode me processar !!!")

Se você é confortável nesse clube, então vá em frente.


13