Domanda

sto rivedendo alcuni molto vecchi (10 anni) di codice C. Le compila codice su Unix / Mac con GCC e cross-compilazione per Windows con MinGW. Attualmente non ci sono stringhe TCHAR tutto. Mi piacerebbe sbarazzarsi del TCHAR e utilizzare una stringa di C ++, invece. È ancora necessario utilizzare le funzioni di ampie finestre, o posso fare tutto ora con Unicode e UTF-8?

È stato utile?

Soluzione

Windows utilizza UTF16 ancora e molto probabilmente lo farà sempre. È necessario utilizzare wstring piuttosto che string quindi. API di Windows non offrono il supporto per UTF8 direttamente gran parte a causa di Windows supportate Unicode prima UTF8 è stato inventato.

E 'quindi piuttosto doloroso per scrivere codice Unicode che compilerà su entrambe le piattaforme Windows e Unix.

Altri suggerimenti

E 'ancora necessario utilizzare il funzioni di ampie finestre, o posso fare tutto ora con Unicode e UTF-8?

Sì. Purtroppo, Windows non ha il supporto nativo per UTF-8. Se si desidera adeguato supporto Unicode, è necessario utilizzare la versione wchar_t delle funzioni API di Windows, non la versione char.

dovrei eliminare TCHAR dal codice di Windows?

Sì, si dovrebbe. La ragione per cui esiste TCHAR è quello di supportare sia Unicode e le versioni non Unicode di Windows. Supporto non Unicode potrebbe essere stata una delle principali preoccupazioni nel 2001 quando Windows 98 era ancora popolare, ma non oggi.

Ed è altamente improbabile che qualsiasi libreria non-Windows-specifico avrebbe lo stesso tipo di char / wchar_t sovraccarico che rende TCHAR utilizzabile.

Quindi, andare avanti e sostituire tutti i tuoi TCHARs con wchar_ts.

Le compila codice su Unix / Mac con GCC e cross-compilazione per Windows con MinGW.

Ho dovuto scrivere cross-platform di codice C ++ prima. (Ora il mio lavoro è scrivere cross-platform di codice C #.) La codifica dei caratteri è piuttosto doloroso quando Windows non supporta UTF-8 e Un * x non supporta UTF-16. Ho finito per usare UTF-8 come il nostro principale codifica e la conversione, se necessario, su Windows.

Sì, la scrittura di applicazioni non Unicode al giorno d'oggi sta girando in un piede. Basta usare l'ampia API ovunque, e non dovrà piangere più tardi. È comunque possibile utilizzare UTF8 su UNIX e wchar_t su Windows, se non hai bisogno di comunicazione (rete) tra le piattaforme (o convertire il wchar_t con API Win32 a UTF8), o andare la strada e uso duro UTF8 ovunque e convertito a wchar_t è quando si utilizzano le funzioni API Win32 (che è quello che faccio).

Per rispondere direttamente alla tua domanda:

E 'ancora necessario utilizzare le funzioni di ampie finestre, o posso fare tutto ora con Unicode e UTF-8?

No, (non-ASCII) UTF-8 non viene accettato dalla stragrande maggioranza delle funzioni API di Windows. Hai ancora a utilizzare le API di larghezza.

Si potrebbe simile bemoan che altri sistemi operativi ancora non hanno il supporto per wchar_t. Così si hanno anche per il supporto UTF-8.

Le altre risposte fornire qualche buon consiglio su come gestire questo in una base di codice cross-platform, ma suona come se si dispone già di un'implementazione di supporto diversi tipi di caratteri. Per quanto desiderabile come lo strappo che fuori per semplificare il codice potrebbe sembrare, non lo fanno.

E prevedo che un giorno, anche se probabilmente non prima del 2020, Windows aggiungerà il supporto UTF-8, semplicemente aggiungendo versioni U di tutte le funzioni API, accanto ad una e W, più lo stesso tipo di linker hack. Le funzioni A 8 bit sono solo uno strato di traduzione tramite W nativo (UTF-16) funzioni. Scommetto che potrebbero generare un U-strato semi-automaticamente dalla A-strato.

Una volta che sono stati presi in giro abbastanza, abbastanza a lungo, circa il loro supporto Unicode '20 ° secolo' ...

Faranno ancora riescono a renderlo difficile da scrivere, brutto da leggere e non portatili per impostazione predefinita, utilizzando le macro scelti con cura e impostazioni di Visual Studio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top