Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Dubbio su set di caratteri stranieri

Ciao,
ho un dubbio circa il funzionamento di programmi su PC che non usano il 
nostro stesso alfabeto. Mi spiego: se sviluppo un programma sul mio PC 
funzioner� correttamente, dal punto di vista dei caratteri 
mostrati/elaborati anche su un PC cinese o russo ?
Esempio:
dim Stringa as String
Stringa = "HELLO!"
MsgBox Stringa
Il cinese vedr� il messagebox con "HELLO!" ?
Altro esempio:
Da noi Asc("A") ritorna 65 e Chr(65) ritorna "A". Anche da loro ?
In altre parole, il nostro set di 256 (0..255) caratteri ce l'hanno anche 
loro ?
Inoltre io faccio uso, per convertire una stinga in Array di byte e 
viceversa, della funzione StrConv:
sStr = StrConv(ByteArray, vbUnicode)     'Da Array di byte a stringa
ByteArray = StrConv(sStr, vbFromUnicode) 'Da stringa ad Array di byte
Queste istruzioni danno lo stesso risultato sia sul mio PC che sul loro ?
Mi rendo conto che sono domande forse sciocche, ma � la prima volta che 
affronto l'argomento.
Grazie!

 mostrati/elaborati anche su un PC cinese o russo ?
Risposta breve: SI.
Risposta lunga:
Tutta la tabella ascii fino al 127mo carattere e' comune, i caratteri
cirillici/simbolici sono un parte assorbiti in (alcune) tabelle ASCII
estese (da 128 a 254), per fare i caratteri jappi/cinesi/arabi ecc. si usa
una combinazione a doppio byte in campi predisposti ad accettare
caratteri UNICODE, in vb6 tuttavia unicode non e' supportato se
non tramite spaventose chiamate API.

 non tramite spaventose chiamate API.
Non sono queste chiamate ?
sStr = StrConv(ByteArray, vbUnicode)     'Da Array di byte a stringa
ByteArray = StrConv(sStr, vbFromUnicode) 'Da stringa ad Array di byte
Grazie per l'interessamento!

 ByteArray = StrConv(sStr, vbFromUnicode) 'Da stringa ad Array di byte
Ohyeah... ora, prova a fargli digerire un carattere unicode arabo
ad un textbox con selezionato un font di sistema :)
Prendi con le pinze quanto segue : la memoria vacilla....
Il casino sta' nel fatto che VB converte da unicode ad ansi (internamente), 
e che
se non hai settato il font e il paese, mostra sempre e solo caratteri
occidentali: nel tuo caso e' un vantaggio, ma se (come il sottoscritto in 
passato)
devi avere la possibilitï¿½ di mostrare caratteri locali (es. il signor 
cazzuya kakato
in giapponne vuole scrivere il suo nome in iragana), o ti smazzi ogni 
singolo
controllo per cambiargli il font a seconda del paese di utilizzo, oppure
smadonni con le API, in modo che i font dei campi dipendano direttamente
dalla lingua del computer "ospite"... e' roba che ho fatto anni fa', quindi 
potrei
star ricordando male...

 star ricordando male...
Ok, ho capito. Almeno credo... Io ho sempre pensato che un programma in
inglese potesse essere visto da qualunque PC allo stesso modo, ma forse non
� cos� scontato.
Grazie!

 su tutti i sistemi ?
Si, a patto che tu stia usando un font di sistema che non preveda caratteri 
locali.
es: MS serif, MS sans serif , courier, fixedsys, modern, roman system, 
terminal

 terminal
Aspetta, non capisco cosa c'entrano i font se non espongo nulla...
Supponi, per assurdo, di avere un programma con questo codice:
Private Sub Form_Load()
    If Chr(200) = "�" Then
       MsgBox "Vero"
    Else
       MsgBox "Falso"
    End If
End Sub
Su un PC russo, giapponese etc... avr� sempre "Vero", no ?

Su un PC russo, giapponese etc... avr� sempre "Vero", no ?
Chr(200)? I caratteri ASCII olre il 127 non � detto che siano gli stessi su
tutte le macchine, anzi non lo sono proprio.
Per essere sicuri meglio usare i primi 127, fino a 7FH.
http://it.wikipedia.org/wiki/Ascii
http://it.wikipedia.org/wiki/ASCII_esteso
--
ciao
  Stefano

 Per essere sicuri meglio usare i primi 127, fino a 7FH.
Ok.
Il punto � che parto effettivamente da un file che usa solo i primi 127
(lettere non accentate, spazi e numeri) ma poi, come dicevo nel mio secondo
post, lo "critto" con gli XOR (quindi vado fino al 254).
Decrittandolo torna come prima ?
Esempio semplificato: nel file ho la lettera "C" (ASCII 67), con 67 XOR 255
diventa � (ASCII 188).
Facendo 188 XOR 255 torna il vecchio 67 ?

 non tramite spaventose chiamate API.
Pensa che io credevo di usarlo normalmente...
No, a parte gli scherzi, Microsoft ha fornito fin dall'inizio di VB6, e 
nativamente nei componenti di base, delle librerie 'parallele' di 
controlli grafici, giï¿œ predisposti per l'Unicode.
Sostanzialmente hai il TextBox di VB6, e poi il TextBox della libreria 
Forms2, che usi esattamente come un normale textbox, perï¿œ supporta 
Unicode.
Noi abbiamo un vecchio software, che continuiamo a mantenere, 
realizzato oramai 7-8 anni fa, che in tempo reale ti commuta da 
italiano a inglese a francese, oppure cambia la visualizzazione a 
cirillico, sulla base del login o del click sulle bandierine delle 
lingue...
Alberto

"Albe Vï¿œ"

e se installi il forms2-munito dove non c'ï¿œ office?
io ho provato su una vm, ed ï¿œ andato in crash all'istante.

Scriveva andrea palazzi martedï¿œ, 09/02/2010:

Non mi risulta (ma tutto potrebbe essere).
Quale riferimento viene segnalato come mancante?
Al setup o all'avvio applicativo?
Alberto

Il 09/02/2010, Albe Vï¿œ ha detto :

Ho provato adesso su una VM W2kSP4, vergine, e non ho avuto alcun 
problema.
Strano...
Alberto

 problema.
fortunato tu.
io per caratteri del sanscrito ho incluso la dll, rifatto il setup, 
installato sulla vm, no prob, poi al primo lancio in cui il textbox forms2 
veniva usato, PUFF!
d'altra parte, ms ha sempre vietato l'inclusione di forms2
io continuo a usarlo in cose solo per me

Facendo 188 XOR 255 torna il vecchio 67 ?
Si, tu hai "C" = 43H se tu fai con la calcolatrice di windows
 43  Xor   FF ottieni   BC   se fai
 BC  Xor  FF ottieni   43
ma questo non c'entra con i caratteri visualizzati, cio� questa operazione la
devi fare prima di visualizzarli.
Se superi il codice 7FH quello che visualizza dipende dalla lingua installata su
quel pc.
--
ciao
  Stefano

 quel pc.
Perfetto! Allora cos� mi va bene, dato che il file crittato contenente anche
caratteri sopra il 127 non viene mai visualizzato, ma viene convertito
internamente e trasformato in quello originale (che ha tutti caratteri <
127) e solo allora viene visualizzato.
Dovrei essere apposto.
Grazie!