Ir para conteúdo
Faça parte da equipe! (2024) ×

Tutorial: Colocar acentos em seus programas com wchar_t


HoruS*
 Compartilhar

Posts Recomendados

Introdução

 

 

Oi

Hoje vamos ver como usar caracteres especiais em C.

Você está cansado de não ser capaz de usar textos com belos acentos em seus programas em C? Este tutorial irá permitir que você faça o seu mais funcional e agradável de usar programas!

Vamos aprender a usar um novo C99 permite gerenciar de forma nativa, sem biblioteca de terceiros, caracteres especiais em todas as suas cadeias de texto.

 

 

Caracteres especiais e linguagem C: um pouco de história

 

 

Por que os caracteres especiais em C é tão complicado? Por que eu não posso simplesmente escrever isso?

 

É necessário se cadastrar para acessar o conteúdo.

 

Estranhamente, a resposta a esta pergunta é simples e complicado. Simples, porque a linguagem C foi inventada pelos norte-americanos que, como vocês sabem, não use acentos ou letras estranhas. Numa época em que os computadores eram grandes e tinha muito pouca memória, o tanque é projetado para armazenar tais caracteres devem ocupar o menor espaço possível na memória. Por isso, não pode armazenar números inteiros de -128 a 127.

 

Complicado, porque 256 números não é o suficiente para armazenar todos os caracteres em todos os idiomas! Pense na cedilha francês com um sotaque espanhol, os tremas alemães ou pior, as letras do grego e russo! E eu nem sequer falar chinês com milhares de ideogramas Smiley ...

O carvão pode realmente armazenar alguns tipos de letras, de acordo com a antiga norma ASCII, que você pode ver Neste Site

 

Mas e depois? Finalmente, para resolver esta situação intolerável, novos padrões de processamento de cartas de figuras (chamado de codificação) foram introduzidos sucessivamente: primeiro, o ASCII estendida, que tem a vantagem de gerenciar um número maior de caracteres, incluindo os acentos famosos (que abrange quase todas as línguas europeias). Chinês, árabe e japonês tinha, entretanto, esperar para Unicode, que gerencia todos os personagens na terra para usar computadores em suas línguas.

E hoje, neste caso, a codificação está longe de problemas contábeis resolvido e muitos permanecem ... Na verdade, é em terreno hostil.

 

O Windows sempre teve um ligeiro atraso na gestão de caracteres especiais. Em sistemas operacionais de "UNIX", como Linux, Mac OS, etc., Gestão Unicode está embutido no sistema na base e é muito mais transparente. Por exemplo, no Linux, você pode incluir de forma segura acentos em seu código fonte, Linux salva arquivos como UTF-8, uma das variantes do Unicode. No Windows, isso é impensável. A este respeito, o Windows 7 despertou muita esperança, mas nem sempre é gasto em Unicode.

Para usar essas novas ferramentas em C, temos um tipo maior do que o caráter char, que tem um "tamanho" de um byte e não pode armazenar até 2 ^ 8 ou 256 personagens diferentes. Ao multiplicar o número de bytes por 2 ou 4, que aumenta significativamente o número de caracteres suporte: uma variável que ocupa dois bytes pode armazenar 2 ^ {16}, ou 65.536 caracteres diferentes!

 

Este tipo existe, ele é chamado de wchar_t, mas foi introduzida no C tardiamente. É por isso que para usá-lo corretamente devemos gastar o nosso modo de compilador C99 (vamos ver como ele é feito). Também vamos usar as novas funções específicas para caracteres especiais, mas não se preocupe em tudo, tudo vai ficar muito parecida com a string "clássico".

 

Você vai entender: nós simplesmente colocar o carvão no lixo! Fez sua despedida, ele não é mais adequado ao nosso tempo ... Memória de hoje não é o que está faltando e limitada a algumas letras é demasiado restritiva. O novo tipo que vamos usar, o tipo ocupa mais espaço na memória, mas vai ser feliz para armazenar todos os caracteres que você deseja, estendido ASCII ou Unicode.

 

244003.png

 

O tipo wchar_t: alguma informação teórica

 

Bem o que significa wchar_t ?

 

Esta pergunta tem sido feita nos comentários: wchar_t significa Ampla tipos de caracteres. "Wide Character" significa literalmente "Character estendida", que pode ser interpretado como "caráter especial" (codificado em mais de um byte)

 

Que lugar tem a memória tipo wchar_t?

 

Isso é inevitável, e ainda ter certeza de que eu estava temendo. Em duas palavras: depende. De acordo com muitos ajustes, especialmente o seu compilador, tipo wchar_t pode levar dois bytes (2 x 8-bit) ou 4 ou mais ... Se você estiver interessado, esta pequena linha de código que você informar:

 

printf("%d", sizeof(wchar_t))

 

Na maioria das vezes, com exceção do compilador ou estranho sistema, você pode esperar que wchar_t leva 2 bytes.

 

Mas, na realidade, o padrão de uma letra que é armazenado num wchar_t?

Novamente, a resposta é simples e pesadelo: não especificado. O wchar_t permite que você simplesmente armazenar bem acima de 127 números para usar caracteres especiais, mas não define qualquer codificação particular. Mais uma vez, isso depende de seu sistema operacional e seu compilador ou bibliotecas que você usa.

A fim de preservar o lado teórico, simples e multiplataforma este tutorial, não tenho a intenção de lhe dar uma palestra sobre a gestão do Unicode. Primeiro vamos fazer nossos testes com o ASCII estendido, uma simples extensão do ASCII que pode gerenciar nossos queridos acentos e hoje funciona da mesma maneira em quase todas as plataformas. Mas esteja avisado: os seus valores podem ser diferentes das minhas ...

Para usar Unicode, você deve usar uma biblioteca de terceiros, ou ferramentas específicas fornecidas com o OS. E o console do Windows é tão limitado quanto a este ponto que não devemos esperar para fazer programas em russo ... Algumas bibliotecas oferecem até mesmo os seus próprios tipos de lidar com Unicode, ele não está fora de perigo, se você começar a se aventurar nessa direção.

Você vai entender, para ensiná-lo a usar o tipo de wchar_t, vamos apenas testes simples objetivo acentos vídeo estendido ASCII. Isto irá permitir que você tanto aprender as noções básicas de gestão da cadeia de fornecimento de caracteres especiais e personagens de destaque em seu console programas.

 

Configure o compilador

 

Como eu disse antes, precisamos praticar um pouco de manipulação para obter o nosso compilador no modo C99.

 

O C99 é uma melhora recente na linguagem C, que traz algumas novidades interessantes. Se você não fizer esta operação, é muito provável que a planta compilação mais tarde no tutorial não negligenciar esta parte!

Eu não estou expiquer não como fazê-lo sob Code :: Blocks 10.05, uma vez que esta IDE é gratuito e multi-plataforma, mas o procedimento é semelhante em outro IDE.

Este procedimento é específico para o GNU GCC Compiler, um compilador livre amplamente utilizado. Proprietários compiladores, como Microsoft, têm também provável que já esteja em C99.

 

No código do menu :: Blocks, vá em "Settings" e depois "Compiler e Debugger .."

 

Verifique na "Compiler Selected" opção GNU GCC Compiler é selecionado.

 

Em seguida, clique na aba "Configurações de compilação" e, em seguida, ir para as "Outras Opções" sub-guia.

 

No campo de texto que aparece em seus olhos, escreva exatamente essa seqüência de texto:-std = c99

 

Clique em "OK" e depois, só que agora, criar um novo projeto. Aconteceu Smiley!

 

Edite projeto directivas de pré-processamento

 

Além dos arquivos de biblioteca padrão que normalmente integram em seus projetos, adicione esta linha ao seu directivas de pré-processamento

 

É necessário se cadastrar para acessar o conteúdo.

 

Na verdade, é nesta parte do C99 funções da biblioteca padrão que estão lidando com caracteres especiais de interesse.

 

Nossa primeira Cadeia wchar_t

 

 

 

Nós somos! Veja como criar e exibir uma seqüência acentos. Vamos praticar em caracteres individuais, os caracteres ASCII, que incluem E, I, A, etc. Na verdade, o tipo wchar_t para armazenar muitos outros personagens, mas compilador e consoles pode ser arisco, como eu já expliquei.

 

Como eu já disse, devemos primeiro usar um novo tipo de personagem. Terminado char, agora vamos usar wchar_t.

Se os caracteres padrões são arrays de char, as seqüências ASCII estendidos são matrizes de wchar_t. Nada muda, a este nível!

Este código criado um array de wchar_t 50, para 49 caracteres.

 

É necessário se cadastrar para acessar o conteúdo.

 

 

 

Mesmo com a wchar_t não se esqueça do '\ 0' personagem que encerra qualquer seqüência de texto famoso! Cuidado com as armadilhas ...

 

Veja como inicializar essa string com o texto "Oi!"

Tente o seguinte código:

 

É necessário se cadastrar para acessar o conteúdo.

 

Ai, isso não funciona ... :mad:

Isso é normal, porque o código está tentando preencher uma string wchar_t com uma corrente convencional! Os dois tipos são diferentes, então ele fica preso na compilação ...

Para especificar o compilador que esta é uma string wchar_t estendida, você deve adicionar um L antes das aspas. Assim, este código é perfeitamente correta.

 

É necessário se cadastrar para acessar o conteúdo.

 

Aviso: não é nesta fase que você pode adicionar acentos. Na verdade, este código tem grandes riscos para plantar a compilação!

 

É necessário se cadastrar para acessar o conteúdo.

 

Note que se o wchar_t permite lidar com caracteres acentuados, ele não permite que você insira em seu código! Por exemplo, não chame a variável "string" ou "element", você pode grandes acidentes!

 

Mas então, como inicializar esta cadeia se contém e? Vamos em primeiro lugar ser como os bons velhos tempos, caractere por caractere. Assim, este código é perfeitamente correta. Observe que você deve adicionar o L antes o valor de cada carta. Não é essencial, mas muito mais limpo!

 

É necessário se cadastrar para acessar o conteúdo.

 

Mais porque aquele 130 ??

 

Boa pergunta! Este é realmente o de pobre e Gerard. Todos os compiladores não aceitam a notação e ', ainda mais prático. Por conseguinte, é necessário substituir a letra e pelo seu valor em ASCII estendido, e esse valor é de 130.

Você pode encontrar os valores ASCII estendidos para cada personagem Ascii Table - ASCII character codes and html, octal, hex and decimal chart conversion.

 

Dependendo do compilador que você estiver usando, alguns valores podem ser completamente diferente da minha! Isso não deve ser demasiado confuso, pedir ajuda em fóruns para saber a codificação do seu compilador ou uso, como eu, Code :: Blocks com o GNU GCC Compiler.

 

Este método de inicialização não é muito prático, para que haja um pequeno truque para fazer sem: os escapamentos. Os escapamentos são simplesmente atalhos para incluir caracteres especiais na inicialização de uma string. Um escape no formulário:

\ XNN

NN é simplesmente o valor ASCII do caractere a ser exibido. Deve ser expressa em hexadecimal. Para converter um número padrão para hexadecimal, você pode usar a ferramenta Windows ou calculadora na internet,Aqui é um Deles.

 

Voltando ao nosso código fonte o tempo todo. Vou lembra.

 

É necessário se cadastrar para acessar o conteúdo.

 

Em vez terrível, não é? Como o valor de "e" em ASCII é 130, e esse valor é 82 em hexadecimal, vamos ser capazes de usar escape "é" \ x82! Aqui está o código em questão.

 

É necessário se cadastrar para acessar o conteúdo.

 

Um pouco mais conveniente, né?

Normalmente, você já sabe o escape chamada "especial": por exemplo, a quebra de linha.

Visualizar e recuperar de uma série de wchar_t

Agora vamos testar um pedaço de código que deve parecer intuitivo, mas que é realmente errado arqui-

 

É necessário se cadastrar para acessar o conteúdo.

 

Deve-se esperar, ele não funciona. Seria muito bom!

Na verdade ela não tem três coisas que o código para torná-lo funcional. Você precisa saber em primeiro lugar.

 

Devemos acrescentar um L antes de cada citação de uma string. É importante indicar que esta é uma cadeia de texto wchar_t!

 

O% c% s e códigos que indicam onde inserir um personagem e uma corda, não funcionam mais! Ele deve ser substituído pelo seu equivalente, isto é,% de lc e% ls!

 

Finalmente, todas as funções de manipulação de texto deve ser substituído por seus equivalentes na biblioteca | wchar.h |. Não estas cabeças, então estas funções são semelhantes às funções, felizmente, você sabe, eles são quase o mesmo protótipo. Char são simplesmente substituídos por wchar_t, eo nome da função que muda um pouco. O equivalente a printf e wprintf é, e fgets é ... fgetws.

 

Precisamos reaprender os nomes das funções?

Idealmente sim, mas existe uma tabela de conversão preparados por me no final da iniciação. E se você usar caracteres especiais regularmente, você vai dominar essas pequenas mudanças rapidamente!

 

Código FALSE

 

É necessário se cadastrar para acessar o conteúdo.

 

Código Correto !!

 

 

É necessário se cadastrar para acessar o conteúdo.

 

Resumir a situação

 

Você está? Não é tão complicado! Em resumo, para obter os caracteres especiais, simplesmente ...

 

Substitua o wchar_t de char

 

Substituir as funções de gestão do texto por seus equivalentes

 

Substitua os marcadores% c e% s (caracteres e strings) pelo seu equivalente lc% e% ls

 

Não se esqueça de descrever um personagem ou uma seqüência de wchar_t com a letra L, como em A ou L "Meu texto!"

 

Pense escapamentos para reduzir dores de cabeça

 

 

 

 

 

 

5hTkq8b.png

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.