Frage

Ich möchte in einem nativen Node.js -Modul in der ICU für die Verarbeitung von Unicode -String -Verarbeitung verwendet werden, weil es mir das scheint v8::String (entsprechend Diese Dokumente) hat zu diesem Zweck keine C ++ - API.

Meines Wissens erwartet V8 UTF-16 in ExternalStringResource und andere APIs, also möchte ich die Intensivstation für die UTF-16-Verarbeitung verwenden.
Ich muss speziell:

  • Iterieren Sie über die Zeichen (nicht nur die 16-Bit-Code-Einheiten) einer UTF-16-String
  • Teilen Sie die Anzahl der Zeichen (nicht nur die 16-Bit-Code-Einheiten) mit, dass eine UTF-16-String enthält

Also schaute ich mir die Intensivdokumentation an und fand die UnicodeString und CharacterIterator Klassen. Jedoch, UnicodeString hat keine fromUTF16 Methode nur fromUTF8 und fromUTF32.

Das andere, worüber ich mich nicht sicher bin, ist, das tut das UnicodeString Konstruktor kopieren Sie die Daten, die ich ihnen gebe oder nicht? Ausweis sehr bevorzugt Um einen null-kopischen Ansatz zu verwenden, bei dem ich nur mit einem unveränderlichen Objekt arbeiten würde, damit er keine Kopiervorgänge ausführen sollte, verwenden Sie einfach den Puffer.

Ich bin mir auch nicht sicher, ob ich nur benutzen kann UCharIterator (Angenommen, ich kann irgendwie konvertieren UChar* aus meinen UTF-16-Saiten).

Meine Frage ist also: Wie benutze ich ICU für die obigen Zwecke?

Vielen Dank im Voraus für Ihre Antworten!

War es hilfreich?

Lösung

UnicodeString Verwendet UTF-16 standardmäßig für den Speicher. Deshalb hat es nur fromUTF8 und fromUTF32: Von UTF-16 gibt es keine Konvertierung.

Es kopiert die Daten. Es ist eine eigene Zeichenfolge, ähnlich wie std::string.

Sie können verwenden UCharIterator Wenn Sie die Daten nicht kopieren möchten. UChar ist ein 16-Bit-Wert. Sie können es zwingen, den 16-Bit-Typ zu sein, mit dem Sie es vorziehen, indem Sie die definieren UCHAR_TYPE Makro:

Definieren Sie UChar als uchar_type, wenn dies #definiert ist (z. B. zu char16_t) oder wchar_t, wenn das 16 Bit breit ist; Immer angenommen als nicht signiert.

Wenn auch nicht verfügbar ist, definieren Sie UChar als Uint16_t.

Dies macht die Definition der UCHR-Plattform abhängig, ermöglicht jedoch eine direkte Kompatibilität für Zeichenfolge mit Plattformen mit 16-Bit-Wchar_t-Typen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top