UTF-8 - PADRÃO DE CODIFICAÇÃO MUNDIAL

Categoria: 

UTF-8 - PADRÃO DE CODIFICAÇÃO MUNDIAL

Atendendo ao pedido de usuários, venho postar um tema interessante e igualmente surpreendente e polêmico.

Há alguns anos tivemos várias discussões acerca dos problemas de acentuação (~,^,´,`), utilização dos caracteres especiais tais como , ▓, ç, etc., na programação Clipper/Harbour em todos os sistemas operacionais. Tivemos problemas que geraram debates e até brigas entre programadores. Brigas entre programadores fazem parte e até impulsiona ideias e inovações visando encerrar a polêmica.

O Clipper foi concebido para trabalhar com a tabela ASCII com 256 códigos de 0 a 255. Isso na época do MS-DOS. A tabela ASCII inicialmente foi criada com 127 códigos. Mais tarde foi estendida para 256 que é como chamamos de ASCII Estendida.

Hoje em dia (e isso é notório), em todos os servidores mundiais de quaisquer países, as acentuações em quaisquer cadastros seja de clientes, de fornecedores, de contabilidade, de produtos, etc são EVITADAS. Se vocês observarem os seus documentos tais como RG, CPF, Título de Eleitor se seu nome ou endereço tiverem acentuações, nos documentos não aparecem acentuações. Por exemplo: onde se lê "Rua dos Abaetés", no documento do cidadão aparece "Rua dos Abaetes". Imagine o nome "José"...seria assim "Jose". Ironicamente, tem casais quando vão conceber filhos, adotam nomes para os bebês sem acentuações para evitar estranheza ou constrangimento. Bom...vamos lá...vamos continuar.

Com a evolução do Windows (eu não vou falar de detalhes pois a história da evolução do Windows é longa que viraria livro), a partir da década de 1990 foi desenvolvida uma nova tabela ASCII denominada UTF-8. O objetivo, ao que me consta, é para evitar as dores de cabeça com a codificação de cada país ao desenvolver o Windows para aquele idioma. 

Por isso, a ideia, vamos dizer a grosso modo, é estabelecer a unificação de todos os caracteres especiais em uma tabela só (vide para melhor entendimento em https://napoleon.com.br/glossario/o-que-e-codificacao-utf-8/). 

Paulatinamente a ideia foi aceita. E isso foi implementada nos Windows mais modernos, notadamente nas versões 10 e 11 que ficaram mais aperfeiçoados.

Inclusive os editores de texto do Windows 11 já vem configurado com UTF-8 como podemos observar no aplicativo Bloco de Notas (Notepad):

Eu uso o Microsoft Visual Studio, o famoso VS. No momento da instalação do VS, ele já vem configurado com UTF-8.

O fato da Microsoft terem suas ferramentas de edição já configuradas com UTF-8 para instalação é uma proposta para adoção do UTF-8 como padrão mundial de codificação.

Então, vamos deixar todos editores (qualquer editor moderno) com a codificação UTF-8 e não altere de jeito nenhum. Se alterar a codificação vai afetar todas as linguagens de programação, os leitores de e-mail, os posts na internet, etc.

Por falar em linguagem de programação, vamos focar na nossa linguagem: o Clipper/Harbour.

Primeiro de tudo, no programa principal (FUNCTION MAIN) não adianta configurar os codepages diferentes da UTF-8 e  não adianta escolher o idioma de seus países. A UTF-8 já tem os caracteres de acentuação de cada país...portanto, não há necessidade de selecionar o idioma português pois a tabela UTF-8 já tem as acentuações. Assim como o idioma espanhol que tem a letra N acentuada (Ñ) já tem no UTF-8. A única coisa que temos que fazer é adotarmos o teclado que iremos trabalhar...aí, cada país adota seu teclado específico. Eu uso o teclado ABNT2, obviamente, pois tem a tecla "c" com cedilha (ç) enquanto que na Argentina ou qualquer outro país de língua espanhola adotam teclado que tenham a tecla "ñ". De qualquer maneira, independente do teclado adotado, não muda em nada o padrão UTF-8. Todos os teclados funcionam bem no padrão UTF-8.
Lembrando: alterar o padrão UTF-8 para outro codepage é um risco desnecessário pois pode dar uma tremenda dor de cabeça. Na linguagem de programação que no nosso caso é o Clipper/Harbour, vou dar um exemplo de configuração de codepage UTF-8 e UTF-8 Estendida.

Vejamos a figura a seguir:

Menu com quadradinhos

Criei um menu de exemplo onde "Novo item" e "New item" tem caracteres que queria que fosse uma seta virada para a direita, mas aparece quadradinhos. Que chato, não?

Isso porque eu configurei os requests e HB's da seguinte maneira:

FUNCTION MAIN
REQUEST HB_CODEPAGE_UTF8
HB_CDPSELECT("UTF8")

Onde:

a) HB_CODEPAGE_UTF8 é codepage padrão adotado mundialmente e;
b) HB_CDPSELECT("UTF8")  é o idioma selecionado que serve para qualquer país.

E os quadradinhos chatos acima? Como resolver?

Simples...basta usarmos a UTF-8 Estendida que pega os caracteres especiais. Aí, basta alterar:

FUNCTION MAIN
REQUEST HB_CODEPAGE_UTF8EX
HB_CDPSELECT("UTF8EX")

E ficou resolvido conforme figura a seguir:

Menu com setinhas a direita

Observe que a palavra "Relatórios" já tem a acentuação "ó", percebeu? Eu nem precisei configurar para o idioma do meu país, deixei como UTF-8EX que já tem todas as acentuações da língua portuguesa.

Em suma, em qualquer linguagem de programação a codificação sempre será UTF-8.

Claro que muitas empresas não vão querer acentuações em seus cadastros. Aí é cada empresa com suas regras. Os bancos, por exemplo, não cadastram nomes de clientes que tenham acentuações como por exemplo "José". Cadastram simplesmente como "Jose" e ponto final. O fato de não querem acentuações é, talvez, por força de hábito assim como para compatibilizar com linguagens extremamente antigas que já existiam ou mesmo por padrão não acentuar. Há quem diga que é para o sistema ficar mais seguro e também não gerar problemas em impressoras. Enfim, são vários motivos.

Mas...para construir um sistema com menus onde visualmente tenham palavras acentuadas não interferem absolutamente em nada os cadastros. São apenas visuais. Na hora de preencher os campos do cadastro é cada um por si, vai acentuar ou não, fica a seu critério. Por outro lado, tem programadores que parametrizam as aplicações de tal maneira que não permitem que os campos sejam preenchidas com caracteres acentuados, ou seja, se digitar "ã", o sistema substitui com "a".

Finalizando:

Em qualquer programa que desenvolver, adote para SEMPRE esta configuração no programa principal:

FUNCTION MAIN
REQUEST HB_CODEPAGE_UTF8EX
HB_CDPSELECT("UTF8EX")
Total votes: 0