Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Dubbi std::locale
Forum - C/C++ - Dubbi std::locale

Avatar
popp109 (Normal User)
Rookie


Messaggi: 27
Iscritto: 27/11/2010

Segnala al moderatore
Postato alle 13:04
Martedì, 29/05/2012
Salve ragazzi non riesco a capire se nel mio caso devo utilizzare un singolo o piu set di caratteri.

In pratica sto realizzando un linguaggio di programmazione(scusate se lo dico sempre in ogni nuova discussione ma è fondamentale per voi che dovete formulare la risposta.) e quindi sono partito lasciando invariato il locale con quello di default del c.Dopo aver introdotto le stringhe e i caratteri le cose sono cambiate con i caratteri multibyte e quindi ho dovuto impostare il locale in "it_IT.UTF-8" per poter trasformare i caratteri multibyte in caratteri estesi(con la funzione wctomb).
Tutto funziona,tutto va bene quando mi accorgo però che tutte le funzioni di input e viceversa usano come separatore decimale la virgola e non il punto dando problemi alla conversione di stringhe in float( esempio atof istringstream). googlando un po ho scoperto che ogni lingua possiede le proprie regole.Risolvere il problema della virgola non è difficile ma non riesco a capire se alla fine il mio linguaggio deve essere compilato su più lingue o visto che le regole del mio linguaggio  le decido io devo utilizzare una sola lingua?

Cosa succerebbe se io impostassi la lingua  it_IT.UTF-8 e poi l'eseguibile girasse su un pc con lingua turca o giapponese?
Io voglio che  un giapponese veda quello che vedo io(sintassi del mio linguaggio) ma con la possibilità di inserire nelle Stringhe i caratteri giapponesi. (Ripeto sul mio pc funziona tutto ma in it_IT.UTF-8)

Cosa avreste fatto voi per risolvere questo problema?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 21:48
Martedì, 29/05/2012

a parte il progetto fallimentare ed inutile, ti consiglierei di adottare una convenzione. ad esempio in C# il separatore dei decimali è il punto, punto!
non dipende dal locale della macchina nel quale viene compilato.
se invece il problema sorge in esecuzione, lì devi prevedere tutte le cultures disponibili, oltre alle culture custom che può impostare l'utente:

http://msdn.microsoft.com/it-it/library/system.globalizati ...

PM Quote
Avatar
popp109 (Normal User)
Rookie


Messaggi: 27
Iscritto: 27/11/2010

Segnala al moderatore
Postato alle 23:40
Martedì, 29/05/2012
Il mio compilatore legge il sorgente in un file di testo (UTF-8)
Quando analizzo una stringa come questa che contiene caratteri unicode,
Codice sorgente - presumibilmente C/C++

  1. ...
  2. String pippo = "54545\565" + '\123' + 0x010 + '\u00A9' + 1+2+6+4 + §;
  3. ...



il contenuto della variabile risulta essere corretta    "54545.5S16©13§"

Ora all'inizio del main ho messo:
Codice sorgente - presumibilmente Plain Text

  1. setlocale (LC_ALL, "it_IT.UTF-8");


perchè se lascio lo standard del c la conversione da carattere esteso a multibyte non funziona.

Ora ti chiedo 3 cose
1. siccome a me funziona, dovrebbe funzionare anche ad un cinese se gli passo l'eseguibile?
2. L'eseguibile quando si apre sulla  macchina del cinese rimane codificato in  it_IT.UTF-8?
3. Se la seconda domanda è si, il cinese se crea un file di testo con codifica utf-8 e scrive e compila
Codice sorgente - presumibilmente C/C++

  1. String pippo = "54545\565" + '\123' + 0x010 + '\u00A9' + 1+2+6+4 + §;


dovrebbe riuscire ad ottenere il mio stesso risultato vero? --> "54545.5S16©13§"

grazie.


PM Quote