mon projet C ++ est actuellement d'environ 16 000 lignes de code gros et j'admettes d'avoir complètement pensé au support Unicode en premier lieu. P>
Tout ce que j'ai fait était un typdef personnalisé pour Je n'ai jamais vraiment travaillé avec Unicode moi-même dans des programmes que j'ai écrites. P>
Quelle est la dure de changer mon projet à Unicode maintenant? Est-ce même une bonne idée? P> LI>
Puis-je simplement passer à std :: string code> comme chaîne code> et saute dans la codage. P>
std :: wchar code> sans aucun problème majeur? p> li>
ul>
3 Réponses :
Probablement la partie la plus importante de la création d'une application Unicode consciente consiste à suivre l'encodage de vos chaînes et à vous assurer que vos interfaces publiques sont bien spécifiées et faciles à utiliser avec les codages que vous souhaitez utiliser. P>
Basculement sur un caractère plus large (en C ++ Toutefois, si vous devez interpréter les caractères d'une chaîne ou d'une interface avec des interfaces non-UTF-8, vous devrez mettre plus de travail mais sans en savoir plus sur votre application, il est impossible de recommander une seule meilleure approche. p> wchar_t code>) n'est pas nécessairement la solution correcte. En fait, je dirais que ce n'est généralement pas la solution la plus simple. Certaines applications peuvent vous éloigner de spécifier que toutes les chaînes et toutes les interfaces utilisent UTF-8 et n'ont pas besoin de changer du tout. std :: string code> peut parfaitement être utilisé pour les chaînes codées UTF-8. P>
Il y a quelques problèmes avec l'utilisation de std :: wstring code>. Si votre application stockera du texte dans UNICODE, elle s'exécutera sur différentes plates-formes, vous pouvez rencontrer des ennuis. std :: wstring code> s'appuie sur wchar_t code>, qui dépend du compilateur. Dans Microsoft Visual C ++, ce type est de largeur de 16 bits et prendra donc uniquement en charge les codages UTF-16. Le compilateur GNU C ++ spécifie ce type à 32 bits de large et prendra donc uniquement en charge les codages UTF-32. Si vous stockez ensuite le texte dans un fichier à partir d'un système (disons Windows / VC ++), puis lisez le fichier à partir d'un autre système (Linux / GCC), vous devrez vous préparer à cette option (dans ce cas convertir de l'UTF-16 à UTF-32). P>
"Ce type est de largeur de 16 bits et prendra donc uniquement en charge les codages UTF-16". Ceci est une erreur. Contrairement à la largeur fixe 16 bits Char, UTF-16 fait des points de code de support i> supérieur à 2 ^ 16.
Je ne parle pas de points de code, je parle du codage des points de code. Je pense que vous êtes confondre UTF-16 avec UCS-2. Sinon, je ne sais pas de quoi vous parlez.
Mon mauvais, j'ai mal compris ce que vous vouliez dire par "seulement soutenir les codages UTF-16".
Puis-je simplement passer à [
std :: wchar_t code>] sans aucun problème majeur? p> blockQuote>Non, ce n'est pas si simple. P>
- L'encodage d'un
wchar_t code> est en fonction de la plate-forme. Windows utilise UTF-16. Linux utilise généralement UTF-32. (C ++ 0x atténuera cette différence en introduisant séparémentchar16_t code> etchar32_t code> types.) Li>- Si vous devez prendre en charge des systèmes de type UNIX, vous n'avez pas toutes les fonctions UTF-16 que Windows a, vous auriez donc besoin d'écrire votre propre
_wfopen code>, etc. li>- Utilisez-vous des bibliothèques tierces? Faire ils em> support
wchar_t code>? Li>- Bien que des caractères larges soient couramment utilisés pour une représentation en mémoire, sur disque et sur- Les formats-web sont beaucoup em> plus susceptibles d'être UTF-8 (ou d'autres
coding-babased) que UTF-16/32. Vous devriez convertir ces. Li>- Vous ne pouvez pas simplement rechercher-et-remplacer
char code> avecwchar_t code> car c ++ confond "caractère" et "octet", et vous devez déterminer quelChar code> S sont des caractères et quelChar code> S sont des octets. Li> ul>
STD :: Wrchar n'est pas équivalent à Unicode.
@Erik: Maintenant, si seulement Microsoft modifierait leur documentation pour refléter cela ...