2010-11-22 5 views

Répondre

14

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.

+0

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

+6

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

+1: Pour les personnes non familières avec l'UTF, il peut être judicieux de définir les BMP. –

2

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.

+0

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

+7

16 - ** octet ** ?? woah c'est un encodage de caractères hardcore – Inverse

+2

@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;) –

6

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.

+2

Il pourrait également être UCS-2 ou S-JIS ou Big 5 ou ... eh bien, n'importe quoi. – greyfade

Questions connexes