2010-01-30 9 views
1

Comment puis-je convertir un code décimal d'un caractère en une chaîne Unicode en C++? Par exemple, je lui donne l'entier 241, c'est le ' & ntilde; ' lettre espagnole, et je veux le convertir en une chaîne Unicode.Comment puis-je convertir un code décimal d'un caractère en une chaîne Unicode en C++?

+4

Il n'y a pas une telle chose, généralement, comme une "chaîne unicode". Vous devez spécifier quel * encodage * vous voulez que votre chaîne, UTF-8 est le plus commun. – unwind

+0

sauf dans les fenêtres où UTF16LE est le plus courant – Anders

+0

@unwind: Je ne suis pas d'accord, "unicode" est communément appelé UTF16, où chaque caractère a une largeur de 16 bits. Lorsque le codage UFT-8 est souhaité, il est spécifié explicitement. –

Répondre

1

Si votre jeu de caractères source est ISO 8859-1 ou 8859-15 (tous les deux ont la lettre minuscule latine avec TILDE au point de code 0xF1 = 241), la conversion doit créer le codage correct pour le caractère Unicode U + 00F1. Maintenant, nous avons besoin de savoir quel schéma de codage Unicode vous utilisez. Si vous utilisez UTF-8, vous aurez besoin du résultat:

\xC3 \xB1 

Si vous utilisez UTF-16 BE (big endian), vous avez besoin:

\x00 \xF1 

Si vous utilisez UTF-16 LE (little endian), vous avez besoin:

\xF1 \x00 

Si vous utilisez UTF-32, alors vous avez besoin de 4 octets au lieu de 2.

Et si vous voulez une chaîne, vous devrez encoder le U + 0000 (NULL) en tant que caractère suivant.

Si vous ne savez pas quelle forme vous avez besoin, vous avez de gros problèmes; Pour utiliser Unicode, vous devez comprendre comment les différentes formes sont codées. Votre bibliothèque peut vous épargner beaucoup de la peine de compréhension, mais finalement, vous devez connaître au moins un minimum about Unicode.

0

Si le code de caractère est déterminé au moment de l'exécution et que vous ne pouvez pas utiliser des littéraux comme explained by Jonathan, vous devez vous fier à votre boîte à outils. Par exemple, dans Qt:

QString codepointToString(QString codepointDecimal) { 
    int codepoint = codepointDecimal.toInt(); //TODO: check errors 
    QChar character(codepoint); 
    return QString(character); 
}