Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Conversione di un programma da ASCII a Unicode

    Ciao a Tutti.
    Ho un problema che mi attanaglia da un pò di tempo. Ho un programma in C appena esportato da Visual Studio 6.0 a Visual studio 2008. questo software gestisce delle dialog uiilizzando le API di window (niente MFC) con il solito invio di messaggi. Per ragioni commerciali si è deciso di convertire tutti i testi presenti nelle varie text box da italiano/inglese (ASCII) a caratteri per esempio cinesi (UNICODE). Data la dimensione del progetto, si è deciso di convertire in unicode solo quello che serviva.
    In breve non ho definito nelle definizioni preprocessore la direttiva UNICODE e _UNICODE (altrimenti dovevo passare l'intero codice da char a WCHAR), ma sono andato a richiamare SendMessageW() per l'invio di messaggi in WCHAR (con le relative conversioni, cast etc), al posto di WCHAR che richiede la #define UNICODE ho incluso <wchar.h> che mi permette di utilizzare un analogo tipo wchar_t (è un char a 16 bit). Eventuali file ini sono in unicode e i testi vengono letti con una GetPrivateProfileStringW. I file .RC sono stati salvati in unicode. Il font utilizzato è Arial Unicode MS con charset Default_Charset (l'unico font sul mio pc che conteneva tutti i caratteri). Il sistema Windows XP pro sp3 è stato impostato tutto con carattere Arial Unicode MS.

    ************************************PROBLEMA****** *********************************************
    Il programma compila e visualizza le dialog. Nella titlebar (la caption) non compaiono i caratteri cinesi(ma neanche arabi, turchi, giapponesi)bensi solo dei "??????????????" oppure caratteri ASCII(per intenderci quelli che utilizziamo in italia).
    nel resto della dialog tutto funziona correttamente.

    Che devo fare? io credo che sia una impostazione del sistema operativo.

    Ho fatto una prova a proposito. Ho installato windows XP sp3 su un'altra macchina con il pacchetto multilanguage cinese tradizionale e semplificato ma in entrambi i casi nn sono riuscito a visualizzare i caratteri correttamente.

    Ciao Grazie Mille

  2. #2
    Con ogni probabilità non hai usato le versioni Unicode di CreateWindow/RegisterWindowClass/SetWindowText in giro per il tuo codice. Il mio consiglio è di convertire tutto il progetto a Unicode, altrimenti ti ritroverai facilmente a dover bestemmiare in turco (ah, anche per quello servirebbe Unicode) ogni volta che un pezzo dell'interfaccia dovrà comunicare con un pezzo della business logic ancora non convertito.
    Magari utilizza i generic text mappings: in questa maniera qualora, sempre per ragioni commerciali, si decidesse di supportare anche Windows 98 , sarai pronto. Scherzi a parte, ho visto che scrivendo le applicazioni con i generic text mappings puoi verificare più facilmente di non aver fatto assunzioni particolari sul tipo di caratteri, e in ogni caso una eventuale futura migrazione ad un tipo ancora diverso di caratteri (che so, dei super-wchar_t UCS4) dovrebbe procedere facilmente.

    Attento all'Arial Unicode MS: se non sbaglio è installato solo con Office, e in ogni caso è un font gigante e piuttosto lento da gestire per il sistema; ti consiglio di lasciare il font predefinito del sistema per l'interfaccia, i glifi aggiuntivi per i font forniti con Windows si possono installare dal Pannello di controllo, senza contare che Windows dovrebbe effettuare delle sostituzioni automatiche qualora manchino dei glifi ad un font.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da MItaly
    ... bestemmiare in turco (ah, anche per quello servirebbe Unicode) ...


    (inutile dire che sono d'accordo ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Ho risolto. Grazie comunque per il consiglio. Di sicuro convertendo a unicode tutto il progetto si riesce, ma nn posso.
    In Pannello di controllo:
    Opzioni internazionali e della lingua ->Avanzate->Lingua per programmi non unicode
    Si seleziona la lingua che si vuole utilizzare. Si sceglie nella messageBx installa da CD di windows XP. e si riavvia.
    A quel punto si riesce a impostare solo quella lingua nella caption, è un po limitto ma è cio che mi serve.

    Si comunque è vero, per fare le cose ben fatte conveniva passare il codice in unicode ma data la dimensione beh manderei in fallimento l'azienda.:-D

    grazie mille a buon rendere

  5. #5
    Occasione persa... ma sono d'accordissimo con te che è un lavoraccio lungo, noioso ed è estremamente soggetto ad errori se il progetto è sempre stato pensato con i char in mente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    si ... il fatto è che certi software utilizzano librerie condiviise o scambiamo dati con sistemi embendeed su cui nn si può utilizzarei wchar. Una conversione in grande stile è un po deleteria.
    Hai detto che Arial Unicode MS è un font pesante. Francamente rimane l'unico carattere con caratteri di ogni tipo. Pesa perchè a differenza di un Tahoma (credo sia solo ASCII) ha molti più caratteri. Ho creato una macchina virtuale con Win xP sp3 multilanguage e l'ho impostato in cinese. A parte che per muovermi nei menu facevo affidamento sulle icone e sul traduttore di google ita->cina :-D , ho scoperto da mappa dei caratteri che utilizzano font predefiniti molto simili all'Arial Unicode MS (l'unica cosa che cambia è lo stile del carattere, piu sottile o piu in grassetto o anche corsivo).

    Rimane da dire che l'Arial Unicode MS lo puoi copiare(come del resto tutti i font). Normalmente lo trascini in C:\WINDOW\FONTS\ e il pc lo installa.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.