Type de projet C++: unicode vs multi-octets; avantages et les inconvénients
Je me demandais ce que le Débordement de la Pile de la communauté pense quand il s'agit de la création d'un projet (de la pensée principalement en c++ ici) avec une unicode ou un multi-byte character set.
-
Sont là des pros d'aller Unicode
directement à partir du début, ce qui implique tous les
vos chaînes seront en grand format?
Existe-il des problèmes de performance /de plus grands
les exigences de mémoire à cause d'un
utilisation standard d'un grand personnage? -
Est-il un avantage à cette méthode?
Faire quelques architectures de processeur
poignée de caractères larges de mieux? -
Sont là toutes les raisons de faire votre
projet Unicode si vous ne prévoyez pas de l'
prendre en charge d'autres langues? -
Quelles raisons aurait-on avoir pour la création d'un projet avec un multi-byte character set?
-
Comment faire tous les facteurs ci-dessus entrent en collision dans un milieu à haut rendement (tel qu'un moderne jeu vidéo) ?
- semble un peu subjectif, aussi un peu comme une question à un professeur pourrait donner. À savoir ces pièces: Quelles raisons aurait-on avoir pour la création d'un projet avec un multi-byte character set? Comment faire tous les facteurs ci-dessus entrent en collision dans un milieu à haut rendement (tel qu'un moderne jeu vidéo) ?
- "Il n'y a aucune raison de faire de votre projet Unicode si vous ne prévoyez pas de prendre en charge d'autres langues?" Si vous prévoyez sur l'utilisation de caractères avec codepoints entre 128 et 255, oui. Traiter avec les pages de code peut être assez ennuyeux.
- UTF-8 est un multi-byte character set (de longueur variable de codage de caractères), n'est-il pas? UTF-16 est également une variable de codage de caractères de longueur.
- Que voulez-vous dire exactement par un multi-byte character set? Tous les codages de caractères qui prennent en charge tous les caractères unicode encoder la plupart des personnages avec plus d'un octet par caractère. Si vous voulez dire une largeur variable de codage alors que cela n'exclut pas la prise en charge unicode. UTF-8 est un très répandue largeur variable de codage de caractères qui prend en charge tous les caractères unicode.
- Je ne suis pas entièrement sûr, mais je sais que dans le jeu de caractères que vous pouvez spécifier un multi-octets qui prend en charge ANSI ainsi que unicode définit, et de caractères par défaut pour l'ASCII, je crois. Je me demande si ça vaut la peine de la conversion de tout à l'échelle de caractères, essentiellement.
- La conversion de tout à "l'échelle de caractères" n'est pas la même chose que la prise en charge unicode. Comment prendre en charge unicode dépend vraiment de ce que vous êtes en train de faire et ce que l'Api vous prévoyez d'utiliser.
- Assurez-vous que vous avez lu ces deux liens; ils peuvent aider à clarifier les raisons de votre titre "unicode vs multi-byte" et "Unicode... ce qui implique toutes vos chaînes seront en format large" sont incorrects: stackoverflow.com/questions/2259544/... et joelonsoftware.com/articles/Unicode.html
Vous devez vous connecter pour publier un commentaire.
Deux questions que je voudrais commenter.
Tout d'abord, vous n'avez pas mention de ce que la plateforme que vous ciblez. Bien que les versions récentes de Windows (Win2000, WinXP, Vista et Win7) prennent en charge multi-octets Unicode et les versions de système d'appels à l'aide de cordes, les versions Unicode sont plus rapides (les versions multi-octets sont des wrappers qui convertir au format Unicode, appelez la version Unicode, puis de convertir toutes les chaînes renvoyées dos à mutlibyte). Donc, si vous faites beaucoup de ces types d'appels de l'Unicode sera plus rapide.
Juste parce que vous êtes ne prévoit pas explicitement de prendre en charge d'autres langues, vous devez toujours envisager la prise en charge Unicode si votre application enregistre et affiche le texte entré par l'utilisateur. Juste parce que votre demande est unilingue, il ne s'ensuit pas que tous les utilisateurs seront unilingue trop. Elles peuvent être parfaitement heureux d'utiliser votre anglais est la langue de l'interface, mais pouvez saisir des noms, des commentaires ou d'autres textes dans leur propre langue et de les afficher correctement.
Vous parlez du Projet VC++ réglage ici, non?
La seule chose qu'il affecte est la version de l'API Win32 l'appelle, il finit par être exécutés. Par exemple, un appel à
MessageBox
va finir comme un appel àMessageBoxA
dans le cas de la multi-octet de paramètre, etMessageBoxW
dans le cas de l'Unicode réglage. Bien sûr, cela aura une incidence sur les types de paramètres de chaîne pour que les fonctions ainsi. En interne,MessageBoxA
appelsMessageBoxW
après la conversion de la chaîne de paramteres du système actuel de paramètres régionaux en Unicode.Mon conseil est d'utiliser l'Unicode paramètres et passer des chaînes Unicode pour les appels de l'API Win32. Qui ne vous empêche pas d'utiliser des chaînes de caractères dans un autre codage interne.
La réponse courte (de l'OMI, et j'ai été la preuve de la mauvaise), c'est qu'il vaut mieux plan pour le pire (ou le mieux en fonction de votre point de vue) et ne unicode droit maintenant.
À moins que votre application est très chaîne intensive, puis aller directement à unicode ne sera pas vraiment d'importance; dans le cas des jeux, il ne devrait pas être un facteur important par rapport au reste du moteur.
Max.
Voici une simple prise en compte: si votre programme de travail si elle est utilisée par M. 菅 直人 ? Son répertoire d'accueil pourrait être difficile à représenter en ASCII.
Quelques années et un million de lignes de code plus tard, vous allez vous souhaite a répondu "oui".
Je souhaite que Microsoft allait arrêter l'amalgame entre "Unicode" avec UTF-16.
Vous n'avez pas à stocker toutes vos chaînes en format large. Vous pouvez utiliser l'UTF-8 au lieu de cela, et obtenir une plus petite empreinte mémoire (pour l'alphabet Latin langues), et la compatibilité avec ASCII 7 bits.
Le seul inconvénient à l'utilisation de l'UTF-8 sur Windows, c'est qu'il n'est pas pris en charge comme une page de codes ANSI, donc, vous devez convertir vos chaînes UTF-16 pour vous WinAPI appels. Combien d'inconvénients que cela entraîne dépend si vous êtes en train de rédiger un programme Windows ou un programme qui se trouve tout juste à être exécuté sur Windows.
La première réponse à cette question devrait... répondre à tout ce que vous devez savoir.