C'è anche una rapida implementazione su stringa di caratteri multibyte convertire unicode wstring?

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

  •  23-09-2019
  •  | 
  •  

Domanda

Nel mio progetto, dove ho adottato algoritmo Aho-Corasick fare qualche modalità di filtro dei messaggi nel lato server, il messaggio del server ottenuto è una stringa di caratteri multibyte. Ma dopo alcuni test ho trovato il collo di bottiglia è la conversione tra stringhe mulitbyte e Unicode wstring. Quello che uso ora è la coppia di mbstowcs_s e wcstombs_s, che richiede tempo costo quasi il 95% di tutta la modalità. Inoltre, ho provato MultiByteToWideChar / WideCharToMultiByte, ha ottenuto lo stesso risultato.  Quindi mi chiedo se c'è qualche altro modo più efficiente per fare il lavoro? Il mio progetto è costruito in VS2005, e la stringa convertita conterrà i caratteri cinesi.   Grazie molto.

Nessuna soluzione corretta

Altri suggerimenti

Ci sono una serie di possibilità.

In primo luogo, che cosa si intende per "carattere multi-byte"? Vuoi dire UTF8 o un sistema ISO DBCS?

Se si guarda alla definizione di UTF8 e UTF16 c'è scopo di fare una conversione altamente ottimizzato, strappandogli i bit "x" e la riformattazione. Si veda ad esempio http://www.faqs.org/rfcs/rfc2044.html parla di UTF8 <==> UTF-32. Regolazione per UTF16 sarebbe semplice.

La seconda opzione potrebbe essere quella di lavorare completamente in UTF16. Rendere la vostra pagina Web (o una finestra di interfaccia utente o qualsiasi altra cosa) in UTF16 e ottenere l'input dell'utente in quel modo.

Se tutto il resto fallisce, c'è Aare altri algoritmi di stringa di Aho-Corasick. Forse cercare un algoritmo che funziona con la codifica originale.

[Aggiunto 29-Gen-2010] Vedere http://www.cl.cam. ac.uk/~mgk25/ucs/utf-8-history.txt per ulteriori conversioni, tra cui due implementazioni C di mbtowc () e wctomb (). Questi sono progettati per funzionare con arbitrariamente grandi wchar_ts. Se v'è solo wchar_ts a 16 bit, allora è possibile semplificare un sacco.

Questi sarebbero molto più veloce rispetto alle (code-page-sensibili) versioni generiche nella libreria standard.

deprecato (credo), ma si può sempre usare la versione non a sicure (mbstowcs e wcstombs). Non sono sicuro se questo avrà un netto miglioramento però. In alternativa, se il set di caratteri è limitato (a - z, 0-9, per esempio), si può sempre farlo manualmente con una tabella di ricerca ..

?

Forse si può ridurre la quantità di chiamate al MultiByteToWideChar?

Si potrebbe anche probabilmente adottare Aho-Corasick di lavorare direttamente sulle stringhe multibyte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top