Pregunta

Estoy buscando usar la UCI para un procesamiento de cadenas de unicode en un módulo nativo de nodo.js porque me parece que v8::String (de acuerdo a Estos documentos) no tiene una API C ++ para este propósito.

Que yo sepa, V8 espera UTF-16 en ExternalStringResource y otras API, por lo que me gustaría usar la UCI para el procesamiento UTF-16.
Necesito específicamente:

  • Iterar sobre los caracteres (no solo las unidades de código de 16 bits) de una cadena UTF-16
  • Diga el número de caracteres (no solo las unidades de código de 16 bits) que contiene una cadena UTF-16

Así que miré la documentación de la UCI y encontré la UnicodeString y CharacterIterator clases. Sin embargo, UnicodeString no tiene un fromUTF16 Método, solo fromUTF8 y fromUTF32.

La otra cosa que no estoy segura es, ¿el UnicodeString Constructor Copie los datos que les doy o no? Identificación Muy preferido Para usar un enfoque de copia cero donde solo trabajaría con un objeto inmutable para que no debería realizar ninguna operación de copia, solo use el búfer en el que lo apunto.

Tampoco estoy seguro de si puedo usar UCharIterator (suponiendo que de alguna manera pueda convertir UChar* de mis cuerdas UTF-16).

Entonces mi pregunta es: ¿Cómo uso la UCI para los fines anteriores?

¡Gracias de antemano por sus respuestas!

¿Fue útil?

Solución

UnicodeString Utiliza UTF-16 para el almacenamiento de forma predeterminada. Por eso solo tiene fromUTF8 y fromUTF32: Desde UTF-16 no hay una conversión que se haga.

Copia los datos. Es una cadena de propiedad, muy parecida a std::string.

Puedes usar UCharIterator Si no desea copiar los datos. UChar es un valor de 16 bits. Puede forzarlo a que sea cualquier tipo de 16 bits con el que prefiera trabajar definiendo el UCHAR_TYPE macro:

Define urocho para ser urbe_type, si eso es #definado (por ejemplo, a char16_t), o wchar_t si eso es de 16 bits de ancho; siempre se supone que no se firman.

Si ninguno está disponible, entonces defina UCHAR para ser Uint16_t.

Esto hace que la definición de la plataforma UCHER dependa de la plataforma, pero permite la compatibilidad de tipo de cadena directa con plataformas con tipos WCHAR_T de 16 bits.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top