DetailPage-MSS-KB

Base de Dados de Conhecimento

Artigo: 145745 - Última revisão: quarta-feira, 7 de Maio de 2003 - Revisão: 2.0

 

Sumário

Para anos, os programadores BASIC estiver a utilizar o ASC e conjunto de caracteres Car funções para aceder e manipular o ASCII. Com o aparecimento de aceitação de Unicode no comercializados sistemas operativos e aplicações, a necessidade de versões melhoradas das funções ASC e Car desenvolveu. Para satisfazer este pedido, o Microsoft Visual Basic (4.0 e versões posteriores) para o Windows inclui o AscB/CarB e AscW/ChrW funções.

Mais Informação

Unicode é um padrão que foi concebido para substituir o padrão ANSI de codificação de caracteres de um formulário numérico. Uma vez que o padrão ANSI utiliza apenas um único byte para representar cada carácter, está limitado a um máximo de 256 caracteres diferentes. Apesar de ser suficiente para as necessidades da audiência fala inglês, ficar pequeno quando é considerado o mercado mundial de software. Com o padrão Unicode, cada carácter é representado por dois bytes, para que defina todo o carácter Unicode inclui 65.536 possíveis localizações.

Microsoft Windows NT, Microsoft Windows 2000 e Microsoft OLE 2.0 são totalmente Unicode com base e Visual Basic (4.0 e versões posterior) representa todas as cadeias internamente no formato Unicode. As funções AscW e ChrW permitem acesso ao caracteres intervalo completo de Unicode. Estas funções funcionam da mesma forma como as funções de ASC e Car originais, excepto que suportam os argumentos de 0 a 65.535 em vez de apenas de 0 a 255. Muitos objectos de Visual Basic (tais como a janela de depuração e a caixa de nome e o texto) devolvem uma "?" quando estes objectos não souber como visualizar um carácter Unicode.

Uma vez que todas as cadeias são agora representadas internamente no formato Unicode, não é tão simples é utilizada representar dados binários numa cadeia. Utilizar a função ' Car para atribuir dados para uma cadeia não resulta num mesmo comportamento que antes. Por exemplo:
   stringvar = Chr(65)
				

resultados numa cadeia longa dois bytes, onde o byte 1 tem um valor 65 e bytes 2 tem um valor de 0 (esta é a representação Unicode da letra "A"). Certifique-se que não se esqueça de que a conversão de ANSI para Unicode não sempre entail apenas adicionar um segundo byte com um valor de zero, tal como acontece neste caso. Por exemplo, maior parte dos códigos de caracteres ANSI no intervalo de 130 159 ter valores Unicode completamente diferentes. Tente executar um 'Debug.Print AscW(Chr(130))' e que um valor de 8218 é apresentado.

Actualmente, o Microsoft Windows requer um pouco do seu processador endian, que significa que uma entidade de bytes múltiplos o primeiro byte é menos significativo e significância aumenta em sucessivos bytes. Isto explica por que razão o carácter Unicode "A" é representado internamente como o seguinte:
   -------------------
   |   65   |    0   |
   -------------------
     byte 0     byte 1
				

As funções AscB e CarB podem ser utilizadas para replicar o utilizado para ser alcançado através de funções ASC e Car, uma vez que estas funções permitem a manipulação de quantidades de byte. Se pretender que uma cadeia de quatro bytes que tem os valores binários de 65, 66, 67 e 68 consecutivamente, em seguida, utilizar a função Car não funcionará. Em vez disso, tem de utilizar a função CarB. Por exemplo:
   stringvar = ChrB(65) & ChrB(66) & ChrB(67) & ChrB(68)
				

Em alternativa, pode utilizar a capacidade de criar matrizes do tipo de dados de byte novo e manipular os dados binários dessa forma.

Segue-se uma explicação sobre os resultados de alguns simples utiliza uma destas funções para clarificar melhor estas informações.

Imprimir Asc(Chr(255))--> "255"

Nada novo aqui, excepto que a função ' Car está a devolver um carácter Unicode que ocupe dois bytes em vez de um carácter ANSI de um byte.

Imprimir Asc(ChrB(255))--> 5 - chamada de procedimento inválido.

Esta utilização devolve um erro porque a função ASC espera sempre, pelo menos, um parâmetro de dois bytes e a função CarB está a devolver apenas um único byte.

Imprimir Asc(Chr(256))--> 5 - chamada de procedimento inválido.

Apesar da função Car devolve um carácter Unicode de dois bytes, demora apenas números entre 0 e 255 para o argumento (note que num sistema DBCS activado, ASC/Car processar caracteres DBCS um byte dois, convertê-los de e para Unicode). Utilizando a função ChrW permite o acesso as localizações de caracteres Unicode completo 65.536.

Imprimir AscW(ChrW(256))--> "256"

Esta é a nova versão da primeira instrução nesta secção. A função de ChrW tem um valor entre 0 e 65.536 e devolve o carácter (em sistemas de 32 bits). A função AscW interpreta este carácter de dois bytes como um carácter Unicode e devolve o valor Unicode correcto para esse carácter.

Imprimir Asc(ChrW(256))--> "65"
Imprimir Asc(ChrW(5000))--> "63"

O que está a acontecer segue-se que a função ChrW está a ser avaliada primeiro. ChrW(256) é o carácter "A" e por isso a função reduz a Asc("A") e o número de Unicode (e ANSI) para "A" é 65. Porque o Visual Basic não saberá como apresentar o carácter representado por Chr(5000) apenas apresenta um "?", e como previsto, Unicode e ANSI valor para "?" é 63.

Imprimir AscB(Chr(65))--> "65"
Imprimir AscB(ChrW(256))--> "0"
Imprimir AscB(ChrW(257))--> "1"
Imprimir AscB(ChrW(555))--> "43"
Imprimir AscB(ChrW(65535))--> "255"

Devolvem todos estes valores podem ser explicados ao compreender como cada carácter é representado internamente (consulte a referência de little-endian acima) e o facto da função AscB observa apenas o primeiro byte do carácter que recebe. Visualmente aspecto o diagrama seguinte:
             -------------------
   Chr(65)   |   65   |    0   |
             -------------------
   Chr(256)  |    0   |    1   |
            -------------------
   Chr(257)  |    1   |    1   |
             -------------------
   Chr(555)  |   43   |    1   |
             -------------------
   Chr(65535)|   255  |  255   |
             -------------------
               byte 0    byte 1
				

A função AscB devolve apenas tudo o que é o primeiro byte do carácter.

Impressão ChrB(65)--> ""

Visual Basic é impresso nada para esta chamada à função CarB porque a função CarB apenas está a devolver uma cadeia de um byte. Cadeias de um byte assim significam nada para o Visual Basic, uma vez que não constituem um carácter Unicode válido (ou conjunto de caracteres).

Impressão ChrB(65) & ChrB(0)--> "A"

Neste caso, estamos são concatenar duas cadeias de um byte para uma única cadeia de dois bytes. Uma vez que o padrão de bits resultante é o mesmo que o padrão de bits para o Unicode "A", que é o que imprime do Visual Basic.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
Palavras-chave: 
kbmt kbinfo KB145745 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 145745  (http://support.microsoft.com/kb/145745/en-us/ )
Partilhar
Opções de suporte adicionais
Fóruns de Suporte da Comunidade Microsoft
Contacte-nos directamente
Encontre um parceiro certificado Microsoft
Loja Microsoft