Вопрос

Я ищу использование ICU для обработки строк Unicode в модуле Native Node.js, потому что мне кажется, что v8::String (согласно с эти документы) не имеет API C ++ для этой цели.

Насколько мне известно, V8 ожидает UTF-16 в ExternalStringResource и другие API, поэтому я хотел бы использовать ICU для обработки UTF-16.
Мне специально нужно:

  • Итерация над символами (не только 16-битные кодовые единицы) строки UTF-16
  • Расскажите количество символов (не только 16-битные кодовые единицы), которые содержит строка UTF-16

Поэтому я посмотрел на документацию ICU и нашел UnicodeString а также CharacterIterator классы Однако, UnicodeString нет fromUTF16 Метод, только fromUTF8 а также fromUTF32.

Другая вещь, в которой я не уверен, это ли UnicodeString Конструктор Скопируйте данные, которые я даю или нет? Идентификатор очень предпочитаю Чтобы использовать подход с нулевой копией, где я бы просто работал с неизменным объектом, чтобы он не должен выполнять какие-либо операции копирования, просто используйте буфер, на который я его указываю.

Я также не уверен, могу ли я просто использовать UCharIterator (при условии, что я могу как -то конвертировать UChar* Из моих струн UTF-16).

Итак, мой вопрос: Как использовать ICU для вышеуказанных целей?

Заранее спасибо за ответы!

Это было полезно?

Решение

UnicodeString использует UTF-16 для хранения по умолчанию. Вот почему это только fromUTF8 а также fromUTF32: Из UTF-16 нет конверсии, чтобы быть сделанным.

Он копирует данные. Это собственная строка, очень похоже std::string.

Вы можете использовать UCharIterator Если вы не хотите копировать данные. UChar 16-битное значение. Анкет Вы можете заставить его быть каким-либо 16-битным типом, с которым вы предпочитаете работать, определив UCHAR_TYPE Макро:

Определите UCHAR как UCHAR_TYPE, если это #Defined (например, для char16_t), или wchar_t, если это 16 бит шириной; Всегда предполагается, что он не знал.

Если ни один из них не доступен, то определите UCHAR как UINT16_T.

Это делает определение зависимых от платформы UCHAR, но обеспечивает совместимость прямого типа строки с платформами с 16-битными типами WCHAR_T.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top