Domanda

Mi chiedo ciò che la comunità Stack Overflow pensa quando si tratta di creazione di un progetto (pensando in primo luogo c ++ qui) con un Unicode o un set di caratteri multi-byte.

  • Ci sono professionisti per andare Unicode dritto fin dall'inizio, che implica tutto le corde saranno in grande formato? Ci sono problemi di prestazioni / grande requisiti di memoria a causa di un uso standard di un carattere più grande?

  • C'è un vantaggio di questo metodo? Fare alcune architetture di processori gestire i caratteri larghi meglio?

  • Ci sono motivi per rendere il vostro progetto Unicode se non si ha intenzione di supportare altre lingue?

  • Quali ragioni avrebbero un avere per la creazione di un progetto con un set di caratteri multi-byte?

  • Come tutti i fattori di cui sopra si scontrano in un ambiente ad alte prestazioni (come ad esempio un moderno videogioco)?

È stato utile?

Soluzione

Due questioni che avevo commentare.

In primo luogo, non accennate quale piattaforma ci si rivolge. Anche se le versioni di Windows più recenti (Win2000, WinXP, Vista e Win7) supportano entrambe le versioni multibyte e Unicode di chiamate di sistema utilizzando le stringhe, le versioni Unicode sono più veloci (le versioni multibyte sono involucri che convertito in Unicode, chiamare la versione Unicode, quindi convertire qualsiasi restituito stringhe indietro a mutlibyte). Quindi, se stai facendo un sacco di questi tipi di chiamate Unicode sarà più veloce.

Solo perché non hai intenzione di esplicito sostegno lingue aggiuntive, si dovrebbe comunque prendere in considerazione il sostegno Unicode se l'applicazione salva e visualizza il testo inserito dagli utenti. Solo perché l'applicazione è monolingue, non ne consegue che tutto di essa gli utenti saranno monolingue troppo. Essi possono essere perfettamente felice di usare la lingua GUI inglese, ma potrebbe desiderare di inserire i nomi, commenti o altro testo nella propria lingua e li hanno visualizzati correttamente.

Altri suggerimenti

Si sta parlando della ++ progetto VC seduto qui, giusto?

L'unica cosa che colpisce è la versione di chiamate API Win32 si finisce per essere exectuted. Ad esempio, una chiamata a MessageBox finirà come una chiamata a MessageBoxA in caso di impostazione multi-byte, e MessageBoxW in caso di impostazione Unicode. Naturalmente, che interesseranno i tipi di parametri di stringa che funzioni. Internamente, MessageBoxA chiama MessageBoxW dopo la conversione delle stringhe paramteres dalla localizzazione di sistema in Unicode.

Il mio consiglio è quello di utilizzare le impostazioni Unicode e passare le stringhe Unicode per chiamate API Win32. Ciò non impedisce di usare le stringhe in qualsiasi altra codifica internamente.

La risposta breve (IMO, e ho dimostrando sbagliato) è che farei meglio i piani per il peggio (o meglio a seconda dei punti di vista) e fare unicode al momento.

A meno che l'applicazione è molto stringa intensiva, andare direttamente in Unicode non importa; nel caso dei giochi, non dovrebbe essere un fattore importante rispetto al resto del motore.

Max.

Ecco una semplice considerazione: se il vostro programma di lavoro se è utilizzato da Sig 菅 直 人? La sua home directory potrebbe essere difficile da rappresentare in ASCII.

  

Ci sono professionisti di andare Unicode dritto fin dall'inizio,

A pochi anni e un milione di righe di codice in seguito, si sta andando ad auguriamo aveva risposto "sì".

  

che implica tutte le stringhe sarà in formato largo?

Vorrei che Microsoft avrebbe lasciato una confusione "Unicode" con UTF-16.

Non c'è bisogno di memorizzare tutte le stringhe in grande formato. È possibile utilizzare UTF-8, invece, e ottenere una minor richiesta di memoria (per le lingue dell'alfabeto latino), e la compatibilità all'indietro con 7-bit ASCII.

L'unico aspetto negativo di utilizzare UTF-8 su Windows è che non è supportato da una tabella codici ANSI, in modo da avere per convertire le stringhe UTF-16 per effettuare chiamate WinAPI. Quanto disagi cause dipende dal fatto che si sta scrivendo un programma per Windows o un programma che succede solo per funzionare su Windows.

La prima risposta a questa domanda dovrebbe ... risposta tutto il necessario sapere.

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