Autore Topic: Problemone con lettere accentate !!  (Letto 1237 volte)

  • Visitatore
Problemone con lettere accentate !!
« il: 25 Agosto 2008, 16:03:33 »
Ciao

Ho questo problemone



in gambas viene visto ( quando faccio per esempio FOR EACH file ecc ecc ) come
 
N

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Problemone con lettere accentate !!
« Risposta #1 il: 26 Agosto 2008, 01:17:05 »
Forse è il caso di dirci dove, come e quando ti và in crash.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Problemone con lettere accentate !!
« Risposta #2 il: 28 Agosto 2008, 00:02:57 »
Ed anche che distribuzione usi, che localizzazione del sistema adotti e la codifica usata per i caratteri.
Visita il mio sito personale: http://www.leonardomiliani.com

  • Visitatore
Re: Problemone con lettere accentate !!
« Risposta #3 il: 30 Agosto 2008, 15:03:33 »
Miseria tutte ste cose avete bisogo di sapere ?

Io che volevo un bottone da premere per sistemare il problema ....

Mi va in crash quando vado a leggere un file sul disco e trova la lettera accentata.

L'errore è (dalla guida):

Bad string conversion (#32)
 The Conv$, SConv$ or DConv$ failed to convert the string.
 The main reason is that the string to convert contains untranslatable characters.


Uso Slax 6.0.7

locale
LANG=en_US
il resto son tutte C ... ???

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Problemone con lettere accentate !!
« Risposta #4 il: 30 Agosto 2008, 16:59:58 »
Non sono un superesperto di Linux ma secondo me è un problema di localizzazione e di codifica dei caratteri.
Prova ad impostare it_IT e come codifica utf-8.

La documentazione ufficiale di Gambas dice, nella voce "Conv$":
Citazione
The Gambas interpreter internally uses the UTF-8 charset.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Problemone con lettere accentate !!
« Risposta #5 il: 31 Agosto 2008, 19:36:29 »
Se nel file sono presenti caratteri non appartenenti alla tabella ASCII, nella fattispecie quelli da 0 a 127, la lettura può andare in crash.

Tieni conto che questi caratteri sono codificati in maniera diversa, ovvero corrispondo a codici superiori a 255, infatti viene usata una codifica a 32 bit, necessaria date le tabelle di localizzazione esistenti.

Per una verifica, esiste un comando Unix, chiamato "od", che ti permette di vedere, a riga di comando, cosa è contenuto dentro il file, a livello di codici ascii, sia in formato decimale che esadecimale:

Il comando seguente ti permette di vedere il contenuto del file in formato carattere, ovvero tutti i caratteri singolarmente:
#od -c | more

Il comando seguente ti permette di vedere il contenuto del file in formato esadecimale:
#od -x | more

Il comando seguente ti permette di vedere il contenuto del file in formato decimale, ovvero i codici reali di ogni singolo carattere:
#od -d | more

Ma a parte quanto sopra, ti consiglierei di leggere il file in modalità binaria (READ).
Per quanto riguarda la conversione con Conv, l set siano corretti; Gambas internamente usa solo UTF-8, per cui se tenti di forzare questa condizione, avrai un errore.
Riguardo la localizzazione, non serve impostarne una diversa nel sistema operativo, anche perchè non sai se il file sia stato creato con quel tipo di caratteristiche; è buona norma sapere da che parte arriva 'sto file, anche se a buon ragione penso si tratti di roba nostrana. I caratteri accentati hanno una codifica maggiore di 255, e necessitano di essere letti con le funzioni che hai usato, solo che, probabilmente, fai confusione nelle impostazioni.

Esempi:

? conv("à","UTF-8","UTF-8")
à

? conv("à","ASCII","UTF-8")
Bad string conversion

? conv("à","UTF-8","ASCII")
Bad string conversion

? conv("a","ASCII","UTF-8")
a

? conv("a","UTF-8","ASCII")
a

? conv("a","UTF-8","UTF-8")
a

Come vedi, per i normali caratteri, entro i 255, qualsiasi modalità non fà differenza; ma riguardo i caratteri accentati, occorre impostare correttamente la decodifica.