ユニコードのwstringにマルチバイト文字列の変換についても、高速な実装はありますか?

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

  •  23-09-2019
  •  | 
  •  

質問

私は、サーバー側でいくつかのメッセージフィルタモードを行うためにエイホ - コラシック法を採用した私のプロジェクトでは、サーバーが得たメッセージは、マルチバイト文字の文字列です。しかし、いくつかのテストの後、私はボトルネックがmulitbyte文字列とユニコードwstringの間の変換で見つかりました。私が今使用して、全モードの約95%の時間コストがかかるmbstowcs_sとwcstombs_sのペアです。また、私はMultiByteToWideCharの/ WideCharToMultiByteを試してみましたが、それだけで同じ結果を得ました。  仕事をするため、いくつかの他のより効率的な方法があるかどうか疑問私はそう?私のプロジェクトは、VS2005で構築され、変換された文字列は、中国語の文字が含まれます。   どうもありがとう。

正しい解決策はありません

他のヒント

多くの可能性があります。

まず、あなたは「マルチバイト文字」とはどういう意味ですか?あなたの平均UTF8またはISO DBCSシステムのですか?

高度に最適化された変換を行うには、

あなたはUTF8とUTF16の定義を見てみるとそこにスコープ、「X」のビット、それらを再フォーマットしてリッピング。たとえば http://www.faqs.org/rfcs/rfc2044.html のを参照してください。 UTF8 <==> UTF32について協議。 UTF16のための調整は簡単になります。

2番目のオプションは、UTF16で完全に動作するかもしれません。 UTF16でWebページ(またはUIダイアログまたは何でも)をレンダリングし、ユーザー入力を取得し、そのようます。

他のすべてが失敗した場合は、

は、アホ - Corasick以外の文字列アルゴリズムがアーレ。おそらく、あなたの元のエンコーディングで動作するアルゴリズムを探します。

[追加された29-JAN-2010] http://www.cl.camを参照してください。 ac.uk/~mgk25/ucs/utf-8-history.txt の変換の詳細については、同時にmbtowc()とwctombの2つのCの実装を含みます()。これらは、任意の大きいwchar_tsで動作するように設計されています。あなただけの16ビットwchar_tsを持っているなら、あなたはそれたくさん簡素化することができます。

これらは、標準ライブラリにおけるジェネリック(コードページセンシティブ)のバージョンよりもはるかに高速になります。

非推奨(私は信じている)が、あなたは常に、非安全なバージョン(mbstowcsはとwcstombs)を使用することができます。いえ、これは顕著な改善を持っていないことを確認場合。また、あなたの文字セットが限定されている場合( - Z、0から9、例えば)?、あなたは常にルックアップテーブルを使って手動で行うことができます..

おそらくあなたは、MultiByteToWideCharの?

へのコールの量を減らすことができます

また、おそらくマルチバイト文字列に直接仕事にアホ - Corasickを採用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top