Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 e anomalie Chr

Salve a tutti.
Lavoro con VB6 (SP6) e ho notato d tempo delle anomalie sull Chr()
In particolare Chr(131) non mi restituisce la "ā"' (lettera a
minuscola col cappuccetto), ma una "f" corsiva con codice ascii 159.
A voi risultano questi bugs sulla Chr(), c'e' della documentazione a
rigurado?
Grazie
Marco

 minuscola col cappuccetto), ma una "f" corsiva con codice ascii 159.
?????
A me da' lo stesso risultato... ma mi pare proprio corretto, tant'e' vero 
che se passo la "f" corsiva alla funzione Asc ottengo, giustamente, 131.
    Alex

 rigurado?
Sopra al 127 non siamo piů nell'ascii standard, ma dipende dalla tabella del 
font usato.
Ciao 


Come faccio a capire/settare la tabella di font?
E poi, come mai, anche se Asc("ƒ") mi restiuisce giustamente 131,
digitando Alt+131 nella finestra immediata vi VB ottengo "â", (a
minuscolo col cappuccio) ossia codice ascii 159 sui miei fogli?
Ciao

 Ciao
Per ottenere col tastierino numerico il carattere giusto a partire dal codice
(ANSI, che è la codifica utilizzata dalle funzioni VB Asc e Chr$), si deve
utilizzare un codice a 4 cifre, anteponendo in questo caso uno zero, quindi
ALT+0131.
Altrimenti (col codice a 3 cifre) ottieni il carattere corrispondente alla
codifica DOS (o OEM).
Da 0 a 127 le due codifiche mi pare che coincidano con l'ASCII standard.
http://agg3333.ifas.ufl.edu/ansi.htm
http://en.wikipedia.org/wiki/Windows_ANSI_code_page
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 minuscolo col cappuccio) ossia codice ascii 159 sui miei fogli?
Perchè secondo me con l'introduzione dell'unicode hanno fatto un casino che 
metà basta.
Sarà anche più flessibile dell'ansi ma segue logiche allucinanti.
Comunque, visto che ti ha già risposto Rafunk evito di fare figuracce.
Piuttosto chiedo anch'io a sì'sto punto che cavolo di caratteri sono quelli 
contrassegnati nella mappa caratteric con U+nnnn, e perchè questi non sono 
utilizzabili da VB.
Ciao 

Funk: cooler than the other side of the pillow.
Allora le cose si complicano!
Il carattere 131, 0x83, nella codepage europea, non é definito, quindi
il mio pc presumo usi una codapage diversa per questo carattere.
MA allora, perche:
Asc   ( Mid ( "ƒ" , 1 ) ) restisuisce 131;
AscB   ( Mid ( "ƒ" , 1 ) ) restisuisce 146.
Sia su 8 che su 16 bit il valore é sempre lo stesso?
Presumo inoltre che la finestr immediata di VB si comporti coma un
shell, ossia Alt+0131.
Ciao!
http://www.microsoft.com/globaldev/reference/WinCP.mspx

 shell, ossia Alt+0131.
Allora, c'e' un modo semplice per venirne fuori, in realta' non c'e' niente 
di complicato: organizzazione.
Se decidi di usare un set di caratteri perche' vuoi che una determinata cosa 
abbia un determinato aspetto, vai sulla Mappa caratteri di Windows, scegli 
il font e lo usi. Ovvero, lo applichi all'elemento che ti serve, poi scrivi 
(con chr) il carattere che ti serve, lanci il software, vedi il risultato, 
amen.
Poi, se ti metti a stampare lo stesso codice ascii in settanta posti 
differenti, tutti con il proprio font (che non sai qual'e'), cercando di 
rendere omogenea la cosa...non e' che e' complicato, sei te che sprechi 
tempo in cose inutili :-)


wrote:

Sto intervenendo su del codice gia esistente, molto ampio, 
in cui le stringhe in questione servono come buffer di dati binari.
Quindi non posso modificare il sorgente esistente, devo capire bene
come si comporta VB e, a seconda di quello che trovo nel codice, agire
di conseguenza.
Ad esempio Asc() e AscB() mi danno comportamenti inaspettati, per lo
meno per me.
Capisco bene che manipolare stringhe invece di array di byte, come si
fa in C, sarebbe la cosa migliore, ma non posso!
Ciao

 shell, ossia Alt+0131.
Non ho capito benebenebene cosa intendi...



Allora se ti trovi a lavorare con dati binari (non *testo*, quindi), forse devi
tralasciare il significato simbolico dei byte come caratteri, ma invece usare
variabili byte array e all'occorrenza la funzione StrConv per le trasformazioni
da e verso variabili stringa (anziché Asc e derivati):
Dim b() As Byte
Dim s As String
    b = StrConv(s, vbFromUnicode)
    s = StrConv(b, vbUnicode)
Ciao


Funk: cooler than the other side of the pillow.
Grazie, ora credo di aver capito.
Ciao 
Marco