Newsgroup: it.comp.lang.delphi
Titolo: Impostazione CHARSET UTF8.

Ciao a tutti,
nella esecuzione di un programma in modalit� console, ho notato che le 
lettere accentate vengono sostituite da altri caratteri.
Deduco che c'� un errore nell'impostazione del set dei caratteri. Per 
correggere questo problema dove dovrei intervenire, affinch� le lettere 
accentate si visualizzino correttamente?
Grazie ancora. 

 accentate si visualizzino correttamente?
Devi intervenire su due cose:
- impostare la console windoze sul locale che ti serve
- usare, dove puoi, la conversione "oem-to-ansi" del tuo output su
stdout.
Dai un'occhiata qui. Non è per delphi ma il concetto è identico
http://www.lugaru.com/man/DOS.OEM.Character.Set.Support.html
Ciao,
Gianpiero


Ho letto, ma non dice nulla di nuovo; in altre parole ci� che mi manca � 
sapere quale "comando" inserire all'interno del sorgente affinch� il set di 
caratteri sia impostato correttamente; non posso pensare di intervenire in 
locale o tramite la shell perch� se l'applicazione viene eseguita su altre 
macchine non ha senso dire "se hai questo problema fai cosi e cosi" 
sembrerebbe quasi la storiella del "virus albanese".
 

>
http://www.lugaru.com/man/DOS.OEM.Character.Set.Support.html
Per il tuo programma devi convertire le stringhe usando funzioni del
tipo CharToOem()
Quindi, ad esempio:
   writeln( StrToOem('urrà!') );
con StrToOem(string) tipo questa:
 
http://www.swissdelphicenter.ch/torry/showcode.php?id=38
Ciao,
Gp


Riporto la funzione:
  Function StrToOem (Const AnsiStr: String): String;
    Begin
      SetLength (Result, Length (AnsiStr));
      If Length (Result) = 0 Then CharToOem (PChar (AnsiStr), PChar 
(Result));
    End;
mi segnala errore E2010 sulla funzione CharToOem e in particolare dice: 
"[DCC Error] Main.pas(80): E2010 Incompatible types: 'Char' and 'AnsiChar'".
Come risolvo?
Grazie ancora.
 

 Grazie ancora.
Leggendo le nuove funzionalità di delphi 2010:
ms-help://embarcadero.rs2010/rad/String_Types.html
con D2010 il tipo string di default è UnicodeString quindi la funzione
di cui sopra deve essere adattata un pochino per D2010.
Non l'ho provata ma penso che cosi' funzioni:
Function StrToOem (Const AnsiStr: AnsiString): AnsiString;
Begin
  SetLength (Result, Length (AnsiStr));
  If Length (Result) = 0 Then CharToOem (PChar (AnsiStr), PAnsiChar
(Result));
End;
ciao,
gianpiero

 End;
Ciao,
ho provato in questo modo ed effettivamente non da errori, ma se provo a 
visualizzare la stringa, non compare nulla :(
 

 visualizzare la stringa, non compare nulla :(
allora devi settare la console per gestire i caratteri corretti.
Guarda, devi smanettare e leggere molto: l'argomento charsets è uno
dei piu' spinosi che ci sia.
Gp

 Gp
Ed � proprio questo che stavo chiedendo nel thread :) Una soluzione lato 
programma... non lato utente. 

Cooper ha scritto:


Non � una questione strettamente legata a Delphi:
In generale:
http://msdn.microsoft.com/en-us/library/ms682087(VS.85).aspx
In particolare (legata al tuo caso)
http://msdn.microsoft.com/en-us/library/ms686036(VS.85).aspx
Ciao
ACSH
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
ab...@newsland.it
Mi mandi il tuo programma o un esempio di programma che hai fatto?
Mandami tutto il progetto delphi.
Gp

 ha scritto nel messaggio 
news:1b31ffdf-4fc3-4bd5...@a6g2000yqm.googlegroups.com...

Se usi seven e scrivi semplicemente writeln ('oggi piover�') in modalit� 
console... ottieni il risultato che ti ho detto. Comunque appena posso provo 
la soluzione di Andrea La Forgia che ringrazio anche. 

 
http://msdn.microsoft.com/en-us/library/ms686036(VS.85).aspx
Questa è veramente carina. In effetti non sapevo come si settasse il
codepage sotto Windoze.
Grazie ACSH!
Gp

 console...
E adesso mi metto pure a scrivere qualcosa al tuo posto?
Volevo farti un favore. Lascia perdere.
Gp


Si lo so, ma per il problema riscontrato, non era necessario inviare tutta 
l'applicazione come richiesto bastava semplicemente provare a scrivere 
quello che ti ho detto per riscontrarlo.; per questo ti ho detto cosi non 
per altro :)
Comunque la soluzione di Andrea La Forgia � stata ottima, mi ha risolto il 
problema.
Grazie ancora.
 

 >
http://msdn.microsoft.com/en-us/library/ms686036(VS.85).aspx
Cercando ancora il buon Marco Cantù fa notare che da D2009 puoi anche
non scomodare direttamente le API windoze:
"Differently from the past, the new AnsiString type string carries one
further piece of information, the code page of the characters in the
string. The
DefaultSystemCodePage variable defaults to CP_ACP, the current Windows
code page, but it could be modified by calling the special procedure
SetMultiByteConversionCodePage. You can do this to force an entire
program to work (by default) with characters in a given code page
(that the operating system installation must support, of course)."
Gp

 (that the operating system installation must support, of course)."
Con Delphi sono fermo a D7: sicuramente molte cose sono state aggiunte da 
allora.
Sara' che sono vecchio (non come il Salvati, pero' ...), ma alle API - che
siano quelle del sistema operativo o quelle della macchina virtuale o quelle
di un framework - ci sono comunque affezionato ed � sempre la prima risorsa
alla quale cerco di attingere quando ho problemi che il sistema di sviluppo
che utilizzo non mi permette di risolvere altrimenti in maniera semplice.
Considerazione personale: mi sembra che molti programmatori diano troppo
spesso la "colpa" a Delphi quando non riescono a comprendere che i problemi
nei quali sono capitati derivano semplicemente dalla loro poca conoscenza
del sistema operativo sul quale sviluppano.
Ciao
ACSH 
--- news://
freenews.netfront.net/
 - complaints: 
ne...@netfront.net
 ---