Gibt es auch eine schnelle Implementierung über multibyte Zeichenfolge konvertieren zu Unicode wstring?

StackOverflow https://stackoverflow.com/questions/2145862

  •  23-09-2019
  •  | 
  •  

Frage

In meinem Projekt, wo ich angenommen Aho-Corasick Algorithmus einige Nachrichtenfilter-Modus in der Server-Seite zu tun, Meldung der Server bekam ist Zeichenfolge von Multibyte-Zeichen. Aber nach mehreren Tests fand ich den Engpass ist die Umwandlung zwischen mulitbyte String und Unicode wstring. Was ich jetzt ist das Paar von mbstowcs_s und wcstombs_s, die fast 95% der Zeit Kosten des gesamten Modus nimmt. Auch ich habe versucht MultiByteToWideChar / WideCharToMultiByte, es wurde nur das gleiche Ergebnis.  Also ich frage mich, ob es eine andere effizientere Art und Weise ist es, die Arbeit zu tun? Mein Projekt ist in VS2005 gebaut, und die Zeichenfolge konvertiert werden chinesische Zeichen enthalten.   Danke vielmals.

Keine korrekte Lösung

Andere Tipps

Es gibt eine Reihe von Möglichkeiten.

Erstens: Was meinst du mit „Multi-Byte-Zeichen“? Wollen Sie damit sagen UTF8 oder ein ISO-DBCS-System?

Wenn Sie bei der Definition von UTF8 aussehen und UTF16 dort Umfang eine hoch optimierte Umsetzung zu tun, die „x“ Bits herauszureißen und sie Neuformatierung. Siehe zum Beispiel http://www.faqs.org/rfcs/rfc2044.html spricht über UTF8 <==> UTF32. Einstellung für UTF16 würde einfach sein.

Die zweite Option könnte sein, ganz in UTF16 zu arbeiten. Machen Sie Ihre Webseite (oder UI-Dialog oder was auch immer) in UTF16 und erhält die Benutzereingabe auf diese Weise.

Wenn alle Stricke reißen, gibt aare andere String-Algorithmen als Aho-Corasick. aussieht möglicherweise für einen Algorithmus, dass die Arbeiten mit Ihrer ursprünglichen Codierung.

[Added 29-Jan-2010] Siehe http://www.cl.cam. ac.uk/~mgk25/ucs/utf-8-history.txt für weitere Umwandlungen auf, darunter zwei C Implementierungen von mbtowc () und wctomb (). Diese werden an der Arbeit entwickelt, um mit beliebig großen wchar_ts. Wenn Sie nur 16-Bit-wchar_ts haben, dann können Sie es viel vereinfachen.

Diese würden viel schneller als die generischen (Code-Seite-sensitiv) Versionen in der Standardbibliothek.

Veraltet (glaube ich), aber man kann immer die nicht-sicheren Versionen verwenden (mbstowcs und wcstombs). Nicht sicher, ob dies allerdings eine deutliche Verbesserung hat. Alternativ kann, wenn Ihr Zeichensatz begrenzt ist (a - z, 0 bis 9, zum Beispiel)?, Können Sie immer es tun manuell mit einer Lookup-Tabelle ..

Vielleicht können Sie die Menge der Anrufe auf MultiByteToWideChar reduzieren?

Sie können auch wahrscheinlich annehmen Aho-Corasick zur Arbeit direkt auf Multibyte-Strings.

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