Pergunta

Estou pensando em usar a UTI para processamento de string unicode em um módulo node.js nativo porque me parece que v8::String (de acordo com esses documentos) não possui uma API C ++ para esse fim.

A meu conhecimento V8 espera UTF-16 em ExternalStringResource E outras APIs, então eu gostaria de usar a UTI para processamento UTF-16.
Eu preciso especificamente:

  • Itera sobre os caracteres (não apenas as unidades de código de 16 bits) de uma string UTF-16
  • Diga o número de caracteres (não apenas as unidades de código de 16 bits) que uma string UTF-16 contém

Então eu olhei para a documentação da UTI e encontrei o UnicodeString e CharacterIterator Aulas. No entanto, UnicodeString não tem um fromUTF16 método, apenas fromUTF8 e fromUTF32.

A outra coisa que não tenho certeza é, faz o UnicodeString Construtor Copie os dados que eu dou ou não? Identidade muito prefere Para usar uma abordagem de cópia zero, onde eu apenas trabalhava com um objeto imutável para que ele não executasse nenhuma operações de cópia, basta usar o buffer em que o aponto.

Também não tenho certeza se posso usar apenas UCharIterator (supondo que eu possa de alguma forma converter UChar* das minhas cordas UTF-16).

Então, minha pergunta é: Como uso a UTI para os propósitos acima?

Agradecemos antecipadamente por suas respostas!

Foi útil?

Solução

UnicodeString Usa o UTF-16 para armazenamento por padrão. É por isso que só tem fromUTF8 e fromUTF32: Do UTF-16, não há conversão a ser feita.

Ele copia os dados. É uma corda possuindo, assim como std::string.

Você pode usar UCharIterator Se você não deseja copiar os dados. UChar é um valor de 16 bits. Você pode forçá-lo a ser o tipo de 16 bit que preferir trabalhar, definindo o UCHAR_TYPE Macro:

Defina uchar para ser uchar_type, se isso for #defined (por exemplo, para char16_t) ou wchar_t se isso for 16 bits de largura; sempre assumido como não assinado.

Se nenhum deles estiver disponível, defina uchar como uint16_t.

Isso torna a definição de dependente da plataforma UCHAR, mas permite a compatibilidade direta do tipo string com plataformas com tipos WCHAR_T de 16 bits.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top