Question

Je cherche à utiliser les ICU pour le traitement de chaîne Unicode dans un module Node.js natif car il me semble que v8::String (selon Ces documents) n'a pas une API C ++ à cet effet.

À ma connaissance, V8 s'attend à UTF-16 dans ExternalStringResource et d'autres API, j'aimerais donc utiliser les soins intensifs pour le traitement UTF-16.
J'ai spécifiquement besoin de:

  • Itérer sur les caractères (pas seulement les unités de code 16 bits) d'une chaîne UTF-16
  • Dites le nombre de caractères (pas seulement les unités de code 16 bits) qu'une chaîne UTF-16 contient

J'ai donc regardé la documentation des soins intensifs et j'ai trouvé le UnicodeString et CharacterIterator Des classes. Cependant, UnicodeString n'a pas de fromUTF16 Méthode, seulement fromUTF8 et fromUTF32.

L'autre chose dont je ne suis pas sûr, c'est, le fait le UnicodeString Constructeur Copier les données que je lui donne ou non? Identifiant préfèrent beaucoup Pour utiliser une approche zéro-copy où je travaille simplement avec un objet immuable afin qu'il ne puisse effectuer aucune opération de copie, utilisez simplement le tampon que je le pointe.

Je ne sais pas non plus si je peux utiliser UCharIterator (en supposant que je peux me convertir en quelque sorte UChar* de mes cordes UTF-16).

Ma question est donc: Comment utiliser les soins intensifs aux fins ci-dessus?

Merci d'avance pour vos réponses!

Était-ce utile?

La solution

UnicodeString Utilise UTF-16 pour le stockage par défaut. C'est pourquoi ça n'a que fromUTF8 et fromUTF32: De UTF-16, il n'y a pas de conversion à faire.

Il copie les données. C'est une chaîne possédée, un peu comme std::string.

Vous pouvez utiliser UCharIterator Si vous ne souhaitez pas copier les données. UChar est une valeur 16 bits. Vous pouvez le forcer à être le type 16 bits que vous préférez travailler en définissant le UCHAR_TYPE macro:

Définissez uchar pour être uchar_type, si c'est #Defined (par exemple, à char16_t), ou wchar_t si c'est 16 bits de large; toujours supposé non signé.

Si ni l'un ni l'autre n'est disponible, définissez uchar pour être uint16_t.

Cela rend la définition de la plate-forme UCHE dépendante mais permet une compatibilité directe de type de chaîne avec des plates-formes avec des types WCHAR_T 16 bits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top