Y a-t-il une différence entre ces deux formats de stockage de chaîne?Quelle est la différence entre "UTF-16" et "std :: wstring"?
Répondre
std::wstring
est un conteneur de wchar_t
. La taille de wchar_t
n'est pas spécifiée: les compilateurs Windows ont tendance à utiliser un type 16 bits, les compilateurs Unix un type 32 bits.
UTF-16 est un moyen de coder des séquences de points de code Unicode dans des séquences d'entiers de 16 bits. En utilisant Visual Studio, si vous utilisez des littéraux à caractères larges (par exemple L"Hello World"
) qui ne contiennent aucun caractère en dehors du BMP, vous finirez avec UTF-16, mais la plupart du temps les deux concepts ne sont pas liés. Si vous utilisez des caractères en dehors du BMP, std::wstring
ne traduira pas surrogate pairs en points de code Unicode pour vous, même si wchar_t
est 16 bits.
Voulez-vous dire que std :: wstring est le même que UTF-16 pour le caractère unicode non-BMP lorsqu'il est utilisé dans le système d'exploitation Windows? – hkBattousai
n ° std :: wstring est juste un conteneur d'entiers. L'encodage du conteneur dépend entièrement des données que vous insérez dans le conteneur. –
+1: Pour les personnes non familières avec l'UTF, il peut être judicieux de définir les BMP. –
UTF-16 est un concept de texte représenté dans les éléments de 16 octets, mais un caractère textuel réelle peut consister en un que l'élément
std :: wstring est juste une collection de ces éléments, et est une classe principalement concernés par leur stockage.
Les éléments d'un wstring, wchar_t, sont au moins de 16 bits mais pourraient être de 32 bits.
Pouvez-vous s'il vous plaît expliquer plus en détail, comme donnant un exemple. Par exemple, le caractère 'A' est stocké dans std :: wstring comme "0x0041". Comment est-il stocké au format UTF-16? – hkBattousai
16 - ** octet ** ?? woah c'est un encodage de caractères hardcore – Inverse
@Inverse: C'est pourquoi tout le monde devrait utiliser ASCII, il n'y aurait pas beaucoup de chagrin sur l'utilisation de la mémoire;) –
UTF-16 est un codage Unicode spécifique. std::wstring
est une implémentation de chaîne qui utilise wchar_t
comme type sous-jacent pour stocker chaque caractère. (En revanche, std::string
utilise char
).
Le codage utilisé avec wchar_t
ne doit pas nécessairement être UTF-16 - il pourrait aussi être UTF-32 par exemple.
Il pourrait également être UCS-2 ou S-JIS ou Big 5 ou ... eh bien, n'importe quoi. – greyfade
il ya une assez bonne réponse à cette question ici: http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring/402918#402918 –