TCHAR e L

di il
23 risposte

TCHAR e L

Ho scritto questo codice

#include<windows.h>
#include<iostream>

using namespace std;

int main() 
{
TCHAR a=L'à';
wcout <<a<<endl;
return 0;
}
Che stampa : Ó
Per compilarlo ho messo -finput-charset=WINDOWS-1252 nelle opzioni aggiuntive di building
di CodeBlocks
Qualcuno può aiutarmi a capire?

23 Risposte

  • Re: TCHAR e L

    Aiutarti a capire cosa esattamente?
  • Re: TCHAR e L

    candaluar ha scritto:


    Aiutarti a capire cosa esattamente?
    Hai ragione mi sono dimenticato di fare la domanda ...
    Cosa posso usare per controllare il contenuto nella variabile a ? Perchè wcout non va bene o sbaglio ?
  • Re: TCHAR e L

    Non si capisce quello che vuoi fare. Il carattere 'à' corrisponde ad un codice numerico della tabella ASCII che hai utilizzato per editare e compilare il programma; se vuoi vedere lo stesso carattere in esecuzione devi usare a video la stessa tabella ASCII, altrimenti otterrai molto facilmente risultati diversi (se il carattere è esteso, ovvero nella seconda parte della tabella, da 128 in poi).
    Cosa posso usare per controllare il contenuto nella variabile a
    Usa un if.
  • Re: TCHAR e L

    candaluar ha scritto:


    se vuoi vedere lo stesso carattere in esecuzione devi usare a video la stessa tabella ASCII
    E quale devo usare ?

    Io stavo leggendo questo
    Ho provato a usare L con delle lettere tipo è é ecc.. e il builder mi dava error: converting to execution character set: Invalid argument
    Allora ho aggiunto -finput-charset=WINDOWS-1252 alle opzioni aggiuntive ( provandone anche altre , ma non cambia nulla), l'errore è sparito , ma il carattere stampato dall wcout è diverso.
    Non capisco...
  • Re: TCHAR e L

    Credo che tu debba semplicemente modificare la tabella in uso al tuo cmd.exe
    http://stackoverflow.com/questions/14109024/how-to-make-unicode-charset-in-cmd-exe-by-default
    Sembrerebbe che dando chcp 65001 si switchi all'unicode... purtroppo ora non riesco a provarlo
    Prova a creare il tuo exe, lanciare un cmd.exe ed eseguire da li il tuo exe; poi prova a dare chcp 65001 e rilanciare il tuo exe (sempre da cmd naturalmente)
  • Re: TCHAR e L

    Ok ma quindi è un problema della console? perche se eseguo questo :
    
    #include<windows.h>
    #include<iostream>
    
    using namespace std;
    
    int main()
    {
    TCHAR a=L'à';
    if(a==L'à')
        cout<<"funziona";
    return 0;
    }
    
    non soddisfa la condizione enon stampa nulla..

    Adesso provo per la console
  • Re: TCHAR e L

    Nulla ho fatto quello che hai detto ma non va :
    Ho eseguito il programma normalmente ho impostato la tabella 65001 rieseguito... ma stesso output
  • Re: TCHAR e L

    Non capisco perchè devo mettere -finput-charset e cosa serve soprattutto ... ho provato tutte le tabelle praticamente, o non cabia nulla , oppure non compila...
  • Re: TCHAR e L

    Se usi TCHAR stai usando UNICODE: se sai quello che stai facendo è bene.
    Se non conosci UNICODE puoi comunque stampare un carattere esteso, a patto però che chi esegue il tuo programma utilizzi la stessa tabella ASCII che hai usato per editare il tuo programma.
    Quindi, fai un passo indietro, usa un comunissimo char, usa un editor che ti permetta di lavorare con una tabella ASCII a scelta (notepad++ permette di far questo ad esempio, codeblock non so), elimina quel parametro dalla compilazione e poi esegui il programma da un cmd.exe in cui hai impostato (con chcp) la corretta tabella ASCII.
  • Re: TCHAR e L

    Non ho capito molto quello che vuoi dire
  • Re: TCHAR e L

    Se io imposto su codeblock UTF-16LE che è quello che usa windows , e che spiega anche su msdn... non mi fa nemmeno compilare
  • Re: TCHAR e L

    Parti dalle basi:
    - scrivi un programma che stampa con printf("%c") tutti i valori da 0 a 255 (verificando isprint())
    - verifica che cambiando codepage del cmd.exe cambino anche i risultati
    questo è il primo passo
  • Re: TCHAR e L

    Qualsiasi tabella imposti l'output rimane:
    
     32      33 !    34 "    35 #    36 $    37 %    38 &    39 '    40 (
     41 )    42 *    43 +    44 ,    45 -    46 .    47 /    48 0    49 1    50 2
     51 3    52 4    53 5    54 6    55 7    56 8    57 9    58 :    59 ;    60 <
     61 =    62 >    63 ?    64 @    65 A    66 B    67 C    68 D    69 E    70 F
     71 G    72 H    73 I    74 J    75 K    76 L    77 M    78 N    79 O    80 P
     81 Q    82 R    83 S    84 T    85 U    86 V    87 W    88 X    89 Y    90 Z
     91 [    92 \    93 ]    94 ^    95 _    96 `    97 a    98 b    99 c    100 d
     101 e   102 f   103 g   104 h   105 i   106 j   107 k   108 l   109 m   110 n
     111 o   112 p   113 q   114 r   115 s   116 t   117 u   118 v   119 w   120 x
     121 y   122 z   123 {   124 |   125 }   126 ~
    
    Ho usato 65001 , 855 , 866...
    
    Microsoft Windows [Versione 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation. Tutti i diritti riservati.
    
    C:\Users\Luigi>chcp 855
    Tabella codici attiva: 855
    
    C:\Users\Luigi>C:\Users\Luigi\Documents\Informatica\tmp\bin\Debug\tmp.exe
     126 ~   127 ¦   128 ?   129 ?   130 ?
     131 ?   132 ?   133 ?   134 ?   135 ?   136 ?   137 ?   138 ?   139 ?   140 ?
     141 ?   142 ?   143 ?   144 ?   145 ?   146 ?   147 ?   148 ?   149 ?   150 ?
     151 ?   152 ?   153 ?   154 ?   155 ?   156 ?   157 ?   158 ?   159 ?   160 ?
     161 ?   162 ?   163 ?   164 ?   165 ?   166 ?   167 ?   168 ?   169 ?   170 ?
     171 ?   172 ?   173 ?   174 ?   175 ?   176 ¦   177 ¦   178 ¦   179 ¦   180 ¦
     181 ¦   182 ¦   183 +   184 +   185 ¦   186 ¦   187 +   188 +   189 +   190 +
     191 +   192 +   193 -   194 -   195 +   196 -   197 +   198 ¦   199 ¦   200 +
     201 +   202 -   203 -   204 ¦   205 -   206 +   207 -   208 -   209 -   210 -
     211 +   212 +   213 +   214 +   215 +   216 +   217 +   218 +   219 ¦   220 _
     221 ¦   222 ¦   223 ¯   224 ?   225 ?   226 ?   227 ?   228 ?   229 ?   230 ?
     231 ?   232 ?   233 ?   234 ?   235 ?   236 ?   237 ?   238 ?   239 ?   240 ?
     241 ?   242 ?   243 ?   244 ?   245 ?   246 ?   247 ?   248 °   249 ·   250 ·
     251 v   252 ?   253 ¤   254 ¦   255  
    
    C:\Users\Luigi>chcp 65001
    Tabella codici attiva: 65001
    
    C:\Users\Luigi>C:\Users\Luigi\Documents\Informatica\tmp\bin\Debug\tmp.exe
     126 ~   127 ¦   128 ?   129 ?   130 ?
     131 ?   132 ?   133 ?   134 ?   135 ?   136 ?   137 ?   138 ?   139 ?   140 ?
     141 ?   142 ?   143 ?   144 ?   145 ?   146 ?   147 ?   148 ?   149 ?   150 ?
     151 ?   152 ?   153 ?   154 ?   155 ?   156 ?   157 ?   158 ?   159 ?   160 ?
     161 ?   162 ?   163 ?   164 ?   165 ?   166 ?   167 ?   168 ?   169 ?   170 ?
     171 ?   172 ?   173 ?   174 ?   175 ?   176 ¦   177 ¦   178 ¦   179 ¦   180 ¦
     181 ¦   182 ¦   183 +   184 +   185 ¦   186 ¦   187 +   188 +   189 +   190 +
     191 +   192 +   193 -   194 -   195 +   196 -   197 +   198 ¦   199 ¦   200 +
     201 +   202 -   203 -   204 ¦   205 -   206 +   207 -   208 -   209 -   210 -
     211 +   212 +   213 +   214 +   215 +   216 +   217 +   218 +   219 ¦   220 _
     221 ¦   222 ¦   223 ¯   224 ?   225 ?   226 ?   227 ?   228 ?   229 ?   230 ?
     231 ?   232 ?   233 ?   234 ?   235 ?   236 ?   237 ?   238 ?   239 ?   240 ?
     241 ?   242 ?   243 ?   244 ?   245 ?   246 ?   247 ?   248 °   249 ·   250 ·
     251 v   252 ?   253 ¤   254 ¦   255  
    
    C:\Users\Luigi>chcp 866
    Tabella codici attiva: 866
    
    C:\Users\Luigi>C:\Users\Luigi\Documents\Informatica\tmp\bin\Debug\tmp.exe
     126 ~   127 ¦   128 ?   129 ?   130 ?
     131 ?   132 ?   133 ?   134 ?   135 ?   136 ?   137 ?   138 ?   139 ?   140 ?
     141 ?   142 ?   143 ?   144 ?   145 ?   146 ?   147 ?   148 ?   149 ?   150 ?
     151 ?   152 ?   153 ?   154 ?   155 ?   156 ?   157 ?   158 ?   159 ?   160 ?
     161 ?   162 ?   163 ?   164 ?   165 ?   166 ?   167 ?   168 ?   169 ?   170 ?
     171 ?   172 ?   173 ?   174 ?   175 ?   176 ¦   177 ¦   178 ¦   179 ¦   180 ¦
     181 ¦   182 ¦   183 +   184 +   185 ¦   186 ¦   187 +   188 +   189 +   190 +
     191 +   192 +   193 -   194 -   195 +   196 -   197 +   198 ¦   199 ¦   200 +
     201 +   202 -   203 -   204 ¦   205 -   206 +   207 -   208 -   209 -   210 -
     211 +   212 +   213 +   214 +   215 +   216 +   217 +   218 +   219 ¦   220 _
     221 ¦   222 ¦   223 ¯   224 ?   225 ?   226 ?   227 ?   228 ?   229 ?   230 ?
     231 ?   232 ?   233 ?   234 ?   235 ?   236 ?   237 ?   238 ?   239 ?   240 ?
     241 ?   242 ?   243 ?   244 ?   245 ?   246 ?   247 ?   248 °   249 ·   250 ·
     251 v   252 ?   253 ¤   254 ¦   255  
    
    Proprio per provare...
  • Re: TCHAR e L

    Prova così
    
    #include <windows.h>
    
    char stringa[] = " Più già dì però piè \n";
    
    CharToOemBuffA(stringa, stringa, sizeof(stringa)); 
    
    printf("%s", stringa);
    
Devi accedere o registrarti per scrivere nel forum
23 risposte