DetailPage-MSS-KB

Microsoft Knowledge Base

Identificativo articolo: 145745 - Ultima modifica: mercoledì 7 maggio 2003 - Revisione: 2.0

 

Sommario

Per anni, i programmatori di base utilizza il ASC, e le funzioni di Chr per accedere e manipolare ASCII set di caratteri. Con l'avvento di accettazione di Unicode in principali sistemi operativi e applicazioni, ha sviluppato la necessità di versioni migliorate delle funzioni Asc e Chr. Per soddisfare questa richiesta, Microsoft Visual Basic (4.0 e versioni successive) per Windows include i AscB/ChrB e di un funzioni AscW/ChrW.

Informazioni

Unicode è uno standard progettato per sostituire lo standard ANSI per la codifica dei caratteri in un formato numerico. Poiché standard ANSI utilizza solo un singolo byte per rappresentare ogni carattere, è limitato a un massimo di 256 caratteri diversi. Mentre questo è sufficiente per le esigenze di un gruppo di destinatari parlare inglese, se breve quando è considerato il mercato del software in tutto il mondo. Con lo standard Unicode ogni carattere è rappresentato da due byte, in modo che il carattere Unicode intero impostare include 65.536 possibili posizioni.

Microsoft Windows NT, Microsoft Windows 2000 e Microsoft OLE 2.0 sono completamente Unicode in base e Visual Basic (4.0 e versioni successive) rappresenta tutte le stringhe internamente in formato Unicode. Le funzioni AscW e ChrW consentono l'accesso i completo intervallo di caratteri Unicode. Queste funzioni funzionare nello stesso modo come le funzioni Asc e Chr originale ad eccezione del fatto che supportano argomenti dallo 0 e 65.535 anziché solo da 0 a 255. Molti oggetti di Visual Basic (ad esempio la finestra di debug e la casella testo ed etichetta) restituiscono un "?" quando questi oggetti non si sa come visualizzare un carattere Unicode.

Poiché tutte le stringhe sono ora rappresentate internamente in formato Unicode, non è semplice come utilizzato per rappresentare i dati binari in una stringa. Utilizzare la funzione Chr per assegnare i dati in una stringa non implica lo stesso comportamento. Ad esempio:
   stringvar = Chr(65)
				

i risultati in una stringa lunga a due byte, dove 1 byte ha un valore byte 2 e 65 ha un valore pari a 0 (questa è la rappresentazione Unicode della lettera "A"). Assicurarsi di tenere presente che conversione da ANSI a Unicode non sempre comportano solo aggiunta un secondo byte con un valore pari a zero, come avviene in questo caso. Ad esempio, la maggior parte dei codici di caratteri ANSI nell'intervallo-130 159 ha valori Unicode completamente diversi. Provare l'esecuzione di 'Debug.Print AscW(Chr(130))' ed è che un valore di 8218 viene visualizzato.

Attualmente, Microsoft Windows richiede un po' processore little-endian, significa che in un'entità byte più il primo byte è meno significativo e significato aumenta in byte successivi. Questo spiega perché il carattere Unicode "A" è rappresentato internamente a quella riportata di seguito:
   -------------------
   |   65   |    0   |
   -------------------
     byte 0     byte 1
				

Le funzioni AscB e ChrB utilizzabile per la replica quello utilizzato per eseguire questa operazione le funzioni Asc e Chr, poiché queste funzioni consentono la manipolazione delle quantità di byte singolo. Se si desidera che una stringa di quattro byte che contiene i valori binari di 65, 66, 67 e 68 in consecutivamente utilizzando la funzione Chr non funziona. È invece necessario utilizzare la funzione ChrB. Ad esempio:
   stringvar = ChrB(65) & ChrB(66) & ChrB(67) & ChrB(68)
				

In alternativa, è possibile utilizzare la possibilità di creare matrici del nuovo tipo di dati byte e modificare i dati binari in questo modo.

Elencati di seguito viene fornita una descrizione dei risultati di alcuni utilizzi semplici di queste funzioni per chiarire ulteriormente tali informazioni.

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

Niente di nuovo in questo caso, ad eccezione del fatto che la funzione Chr restituisce un carattere Unicode che occupa due byte anziché un carattere ANSI di un byte.

Stampa Asc(ChrB(255))--> 5 - chiamata di routine non valido.

Questa sintassi restituisce un errore perché la funzione Asc prevede sempre almeno un parametro di a due byte e la funzione ChrB restituisce solo un singolo byte.

Stampa Asc(Chr(256))--> 5 - chiamata di routine non valido.

Sebbene la funzione Chr restituisca un carattere di Unicode a due byte, occorrono comunque solo numeri compresi tra 0 e 255 per l'argomento (si noti che in un sistema DBCS attivato, ASC/Chr gestire caratteri DBCS a due byte, conversione di i in e da Unicode). Utilizzando la funzione ChrW consente di accedere le posizioni del carattere Unicode completo 65.536.

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

Questa è la nuova versione della prima istruzione in questa sezione. La funzione ChrW accetta di un valore da 0 a 65.536 e restituisce tale carattere (nei sistemi a 32 bit). La funzione AscW interpreta di questo carattere due byte come carattere Unicode e restituisce il valore Unicode corretto per tale carattere.

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

Che cosa accade di seguito è che viene valutata innanzitutto la funzione ChrW. ChrW(256) è il carattere "A" e pertanto la funzione si riduce a Asc("A") e il numero di Unicode (e ANSI) per "A" è di 65. Perché Visual Basic non riconosce come visualizzare il carattere rappresentato dal Chr(5000) ma indica semplicemente un "?", e come previsto, di Unicode e ANSI valore per "?" è 63.

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

Tutti questi restituire valori possono essere illustrati comprendendo ogni carattere è rappresentato internamente (vedere il riferimento di little-endian precedente), il fatto che la funzione AscB esamina solo il primo byte del carattere riceve. Visivamente aspetto nel diagramma riportato di seguito:
             -------------------
   Chr(65)   |   65   |    0   |
             -------------------
   Chr(256)  |    0   |    1   |
            -------------------
   Chr(257)  |    1   |    1   |
             -------------------
   Chr(555)  |   43   |    1   |
             -------------------
   Chr(65535)|   255  |  255   |
             -------------------
               byte 0    byte 1
				

La funzione AscB solo restituirà il contenuto il primo byte del carattere.

Stampa ChrB(65)--> ""

Visual Basic viene stampato nulla per questa chiamata alla funzione ChrB perché la funzione ChrB solo restituisce una stringa di un byte. Stringhe di un byte come questo significa niente da Visual Basic perché non costituiscono un carattere Unicode valido (o una serie di caratteri).

Stampa ChrB(0) & ChrB(65)--> "A"

In questo caso, si sono concatenazione di due stringhe di byte in un'unica stringa a due byte. Poiché il modello di bit risultante è lo stesso schema di bit per Unicode "A", ovvero viene stampato in Visual Basic.

Le informazioni in questo articolo si applicano 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 a 16 bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
Chiavi: 
kbmt kbinfo KB145745 KbMtit
Traduzione automatica articoliTraduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell’articolo: 145745  (http://support.microsoft.com/kb/145745/en-us/ )
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Condividi
Altre opzioni per il supporto
Forum del supporto di Microsoft Community
Contattaci direttamente
Ricerca di un partner certificato Microsoft
Microsoft Store