PDA

Visualizza la versione completa : C++ Builder 5 con caratteri UNICODE


Paolo1985
30-07-2008, 10:47
Ciao a tutti!!!!

Sto sviluppando un'applicativo in c++ builder 5,questo applicativo legge le caption degli
oggetti in un file .txt (questo per la possibilita di cambiare lingua) prende il codice e poi lo associa con la parole es.:
00001:Esci
00002:Apri
etc.....

Il problema che non riesco a mettere i caratteri in formato unicode negli oggetti, ho provato a caricare tutte le lingue in impostazioni internazionali a convertire i caratteri unicode presi dal file e mettere in char normali...

Qualcuno mi sa dire come risolvere questo problema, se devo cambiare gli oggetti in unicode ho (come letto in altri forum) la possibilita di cambiare i settaggi del Builder?

shodan
30-07-2008, 13:40
Non so se esistono oggetti per il C++ Builder che accettino tipi di stringa diversa da una AnsiString. Io, per me, userei l'API WideCharToMultiByte per convertire una widestring in una stringa ansi e poi trasformare quest'ultima nel tipo adatto al Builder. E userei utf8 per farlo.

Paolo1985
30-07-2008, 16:13
Oh provato per vedere se gli oggetti di builder funzionino con l'unicode, prima di tutto ho cercato la funzione (WideCharToMultiByte) ma non la ho trovata ma ho trovato una funzione simile (WideCharToString)...

Adesso ho provato a fare un bottone che copia il contenuto in unicode da una parte all'altra di una textbox ma non fuizione cioe quanco metto nella text1 mi lecce la porola un unicode ma quando la copia nell'oggetto text2 mi fa vedere questi ??????...

wchar_t *str;
AnsiString sDestinazione;
WideString Source;
Source = Text1->Text;
str = Source.c_bstr();
sDestinazione = WideCharToString( str );
Text2->Text=sDestinazione ;

Come fare????

Paolo1985
31-07-2008, 13:40
E se percaso provassi a installare il builder 2007?
Risolverei il problema ho non cambierebbe nulla....

E se SI il mio software avra qualche problema passando da una versione ad un'altra?

shodan
31-07-2008, 13:57
La WideCharToMultiByte una funzione delle api di Windows.
http://msdn.microsoft.com/en-us/library/ms776420(VS.85).aspx

Non ho molta dimestichezza con le classi del Builder, preferisco le librerie standard del C++ e convertire le stringhe all'ultimo.
Col Turbo C++ Explorer (che usa la stessa VCL) ho provato questo:


WideString ws = WideString(Edit1->Text);
Edit2->Text = WideCharToString(ws.data());

e non mi ha dato nessun problema.
Solo non so con che tipo di encode viene effettuata la conversione.

Paolo1985
31-07-2008, 15:19
Ho provato a fare questo codice:

WideString ws = WideString(Rck1->Text);
Edit1->Text = WideCharToString(ws.c_bstr());

per ws.Data(); non cera sulla widestring del builder e ho messo ws.c_bstr() e converte la stringa in wchar_t:


mi da lo stesso problema cio su Edit1 mi fa vedere ugualmente i ????? e ho messo un testo in arabo e cinese, percaso devo modificare l'impostazione del computer????

shodan
31-07-2008, 19:49
La WideCharToString effettua una conversione da utf16 a char, senza tener conto del codepage utilizzato per quello vedi i vari ????
Questo perch il sistema non sa che carattere usare.

Con l'api WideCharToMultiByte e code page 950

( http://msdn.microsoft.com/en-us/library/ms776446(VS.85).aspx )

il testo qui sotto (cinese in unicode) :

大家好。

viene convertito in AnsiString come:

janC

Utilizzando utf8 invece:

大家好。

Loading