sexta-feira, 4 de outubro de 2013

Down with Unicode! Por 16 bits por caractere é uma dor bem no ASCII


Entrega Email: quatro passos para obter mais e-mail para a caixa de entrada


Stob recentemente experimentou uma conversão Damasceno e, como muitos desses convertidos, estou agora definida em um curso de indiscriminada e proselitismo agressivo.


Senhoras e senhores, coloque seus ouvidos na posição receptiva-se dobrado, e prepare-se para ser arrastado pela próxima grande one-and-único movimento verdadeiro.


O início


No início - bem, não no começo, obviamente, porque isso exigiria uma discussão adequada de questões como a paridade e de correção de erros e distâncias de Hamming, ea famosa briga entre os irmãos ASCII , ISCII VISCII e YUSCII , e como em década de 1980, se você tentou enviar um sinal de libras para uma impressora estranho que você não tinha amizade anteriormente (por exemplo, através da compra de uma nova fita bonita) suas chances de sucesso eram insignificantes, e, e ...


Mas você é uma pessoa ocupada e importante.







Assim, no início, que começou no mundo limitado de final de MS-DOS e programação antecipada do Windows, O melhor amado, havia essas coisas chamadas "páginas de código" .


Para o anglophone ocioso do Windows programador (ou seja: eu) páginas de código fosse algo horrível e exigente que se esperava para fugir com ignorando. Eu estava vagamente consciente de que, para processar cordas em algumas das línguas estrangeiras squigglier, foi necessário mudar a página de código e, por vezes, caramba, use dois bytes por caractere, em vez de apenas um. Já era ruim o suficiente que não poderia decidir quantos caracteres demorou para marcar o fim de uma linha.


Eu enfaticamente não queria nada disso, e eu não estava sozinho.


Então nós colocamos nossas cabeças para baixo e manteve a nossa página de código - o nosso conjunto de caracteres de 8 bits - o que foi estabelecido de acordo com o algoritmo Imperialismo Inglês identificado pela primeira vez na década de 1960 renome cantor Michael Flanders.


(Flandres tinha notado que havia apenas dois tipos de selos:. selos ingleses, em conjuntos de, no início do álbum, e selos estrangeiros, tudo misturado, no final do álbum Esta observação philatelistic continua a ser a ideia-chave da organização por trás dos sistemas. ASCII derivados para este dia letras adequadas e personagens são representados pelos códigos 32 para o espaço através de 126 para tilde; material estrangeiro, com seus ganchos de atendimento e loops e pedaços soltos de sujeira mosca, aparece em algum lugar acima).


Então Unicode


Tanto quanto eu sei, não há um mito de criação associado com a unificação dos conjuntos de caracteres do mundo.


Eu gosto de imaginar um deputado Unicode, que ajudou no edifício das Nações Unidas, sendo encarregado de criar o novo cartão de instrução prática de incêndio, que incluiu os mesmos três ou quatro sentenças proferidas em 117 idiomas. Quando ele tentou imprimi-lo, os sais de Epsom NoisyMatrix 800000 escreveu um único rosto sorridente no topo da página, e acendeu o seu fora do papel de LED, e caiu.


Naquela noite, o Sr. Unicode sentou-se à mesa da cozinha com a Sra. L e seus dois glifos pequenos (que foram autorizados a permanecer até após a sua hora de dormir para o efeito) e contou todos os personagens em todas as línguas em todo o mundo. E quando eles tinham terminado de adicionar-los, descobriu-se que havia apenas 60 mil deles, mais ou menos.


Mesmo que isso conta a avaliação inicial não é muito justo, a vida real Mr U deteve sobre a descoberta de que o número total poderia ser acomodados em dois bytes. Ele afirmou que "a idéia de expandir a base para a codificação de caracteres de 8 a 16 pedaços é tão sensível, de fato tão óbvio, que a mente inicialmente recua a partir dele" [ver Unicode 88 Seção 2.1 , PDF].


Mr Unicode admitiu que houve na verdade um pouco mais de 65.536, o limite de 2 16, mas só se você incluiu "personagens irracionais". Então lá.


Esta idéia foi um sucesso. No início de 1990, Unicode foi saudado como a cura para o conjunto de problemas de caráter, e incorporado tecnologias do dia.


Recém-nascido Windows NT tinha, e portanto não-muito-tudo conquista C + + estendendo GUI framework Qt. Elegante, futurista Java ostentado-lo, com os livros de texto primeiros definindo coisas como


public static final double π = 3.14159;


só porque podia.


Nós, os técnicos daquela época foram mortos impressionado. Ninguém se importava muito que metade dos bytes em uma seqüência eram zero. Todos esses buracos extras tornou mais fácil para o ar fresco na memória de dados.


Além disso, alguns bytes extras, e algumas construções hediondos como o Visual C + + 's TCHAR , parecia um preço justo a pagar em troca do glorioso simplificação que todos os personagens eram do mesmo comprimento. O futuro parecia cheio de pessoas alegres, bem-alimentados de todos os credos, cores e, acima de tudo, línguas feliz compartilhando laptops do outro e apontando para as coisas e rindo, como se vê nas fotos de marketing da Microsoft.


Agora Unicode


Descobriu-se que que havia usos para personagens irracionais, afinal. Wikipedia diz que muitos dos caracteres chineses omitidos eram parte de nomes de pessoas e lugares. Pode-se imaginar o sentimento de uma pessoa com um nome que era o equivalente chinês do 'Higginbottom' descobrindo que, usando o conjunto de caracteres Unicode originais, o seu nome deve ser transmutado para o equivalente chinês de 'Figgingarse.


Os Figgingarses deste mundo - ou "o governo da República Popular da China" - foram, compreensivelmente, não muito satisfeito. Em 1996, Unicode Alto Comando admitiu o problema e publicou um padrão revisado para acomodar os outliers razoáveis. Atualmente, contém cerca de 110 mil caracteres.


Você deve ter notado que este é consideravelmente acima do original limite de dois bytes. E, sim, ele forçou o retorno medo de caracteres de comprimento variável.


Este é um ponto chave. O padrão cujo principal benefício é que todos os caracteres foram codificados para o mesmo comprimento que o benefício perdido em 1996.


Nem sequer sobreviver o tempo suficiente para ver o Dome.


Em Joel Spolsky famoso ensaio de 10 anos atrás, ele regiamente patronises programadores que acreditam que "Unicode é simplesmente um código de 16 bits, onde cada personagem tem 16 bits ... É o único mito mais comum sobre o Unicode, por isso, se você pensou que , não se sinta mal ".


Mito? Mito? Oh, não sod off, Joel.


Quero dizer, não é como se o Unicode original de miseravelmente borked condição foi amplamente divulgado, não é? Se fosse chamado, digamos, "Unicode, a poderosa espada de Babel, que estava quebrada e foi às pressas re-colados", então gostaríamos de saber onde estávamos.


Intervalo terminológica


By the way, Joel usa o nome 'UCS-2' em vez de 'Unicode'. Este é provavelmente mais correto, mas eu me recuso a segui-lo, porque:



  1. Ele confunde a questão com o jargão Extra - Estou escrevendo um discurso aqui, não é um manual técnico de sangue.

  2. Toda a Microsoft não se incomoda, então eu não vejo por que eu deveria.

  3. Tem algo da conotação de dignificar um impopular "poll tax" com o mais razoável-e-oficial-som "charge comunidade", e

  4. Eu acredito que deve ser 'UTF-16' de qualquer maneira, se estivéssemos realmente a ir por esse caminho terminologia precisa.


Enquanto estamos aqui, observar que, apesar de suas objeções também estou recusando-se adequadamente para introduzir / define os seguintes termos: 'UTF-1', 'UTF-7', 'conjunto grafema', 'ponto de código', 'UCS-4' e "ISO 10646. Assim que se começa ao longo desta forma, torna-se irremediavelmente preso nas explicações tediosas que impedem um atingindo o ponto. Por exemplo, o líder 'U' em todas essas siglas significa "Unicode", o que por si só exige cerca de três parágrafos de maçante, thumb-girando explicação.


Mas eu não tenho nenhum problema com você olhando para todos eles, ou discutindo sobre eles nos comentários, se você quiser. Em seu próprio tempo.


A alternativa


Até o início de 2000 uma alternativa plausível tinha tomado raiz: UTF-8. Esta é uma codificação de byte-oriented que mantém compatibilidade com o original 7-bit ASCII, mas (como pós-1996 Unicode) sofre a maldição de caracteres de comprimento variável para lidar com sua Estrangeira. Caracteres individuais são representados por um a quatro bytes.


No entanto, UTF-8 de rabiscos são codificados usando um esquema elegante concebido pelo próprio cresceu, ou seja, Ken próprio . Esquema de Thompson tem um recurso de "auto-sincronização", o que significa que você pode descobrir os limites de caracteres em qualquer ponto em uma seqüência sem a necessidade de voltar ao começo. Não é tão bom para tratar como uma seqüência de caracteres uniformes, mas parece que o melhor absoluto de um mau trabalho.


Eu tinha consciência de UTF-8, durante muitos anos, e que tinha cronometrado que era o sistema preferido entre a tendência GNUdal. Claro, Linux usado UTF-8 ao invés de submeter-se o horror de caracteres de 16 bits, mas devo isso foi devido a usuários de Linux que preferiram código em C sobre arrivista impertinente C + +, e que considerava GUIs em geral, como um sistema mal satisfatório para triagem suas meia dúzia de sessões de terminal.


O manifesto


Então, na semana passada, um colega me indicou a esse artigo, UTF-8 Everywhere .


E eu vi a luz.


Eu exorto-vos a lê-lo por si mesmo, mas em resumo brutal argumenta convincentemente que afirmei levianamente:



  • Que 16-bit Unicode está irremediavelmente quebrado.

  • Que UTF-8 é intrinsecamente superior para tudo, exceto tarefas muito especializadas.

  • Que, sempre que possível, tudo novo código deve evitar usar o antigo e preferir o último.


Obviamente, esse último ponto vai ser um pouco complicado.


Para Windows programadores C + +, o manifesto identifica técnicas específicas para fazer um núcleo de código UTF-8 based, incluindo uma biblioteca de proto-Boost concebido para o efeito. (Ironicamente, a primeira coisa que você tem a fazer é ligar o interruptor Unicode no Visual C + + compilador para 'on').


Para os usuários de outras ferramentas, é um convite para rever a sua posição. Por exemplo, meus colegas usuários de Delphi deve perceber que Embarcadero abandonou o suporte para o tipo de UTF8String de seus extravagantes novos compiladores baseados em LLVM. Hum.


Como o manifesto diz: "UTF-16 [...] existe por razões históricas, adiciona um monte de confusão e espero morrer".


Amém a isso. Próximo fim de semana eu vou estar raspando todos os meus arquivos Unicode do meu disco rígido, levando-os para o fundo do jardim, e queimá-los. Como bons cidadãos do mundo digital, exorto a todos a fazer o mesmo.


E se você não concordar, você pode Uńίς5 ⾞ ✯ off. ®








via Alimentar (Feed)

Nenhum comentário:

Postar um comentário