繁体   English   中英

是否有关于多字节字符串转换为unicode wstring的快速实现?

[英]Is there even fast implementaion about multibyte character string convert to unicode wstring?

在我的项目中,我采用Aho-Corasick算法在服务器端做一些消息过滤模式,服务器得到的消息是多字节字符串。 但经过几次测试后,我发现瓶颈是mulitbyte字符串和unicode wstring之间的转换。 我现在使用的是一对mbstowcs_s和wcstombs_s,它占整个模式的近95%的时间成本。 另外,我尝试过MultiByteToWideChar / WideCharToMultiByte,它得到了相同的结果。 所以我想知道是否还有其他更有效的方法来完成这项工作? 我的项目是在VS2005中构建的,转换后的字符串将包含中文字符。 非常感谢。

有很多种可能性。

首先,“多字节字符”是什么意思? 你的意思是UTF8还是ISO DBCS系统?

如果你看一下UTF8和UTF16的定义,可以进行高度优化的转换,去掉“x”位并重新格式化它们。 例如,参见http://www.faqs.org/rfcs/rfc2044.html,讨论UTF8 <==> UTF32。 调整UTF16很简单。

第二种选择可能是完全使用UTF16。 以UTF16渲染网页(或UI对话框或其他内容)并以此方式获取用户输入。

如果所有其他方法都失败了,那么除了Aho-Corasick之外还有其他字符串算法。 可能会寻找适合您原始编码的算法。

[已添加29-Jan-2010]有关转换的更多信息,请参阅http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt ,包括mbtowc()和wctomb的两个C实现()。 这些设计用于处理任意大的wchar_ts。 如果你只有16位wchar_ts,那么你可以简化它。

这些将比标准库中的通用(代码页敏感)版本快得多。

不推荐使用(我相信),但您可以随时使用非安全版本(mbstowcs和wcstombs)。 不确定这是否会有明显的改善。 或者,如果你的字符集是有限的(例如a - z,0 - 9),你总是可以用查找表手动完成它。

也许你可以减少对MultiByteToWideChar的调用量?

您也可以采用Aho-Corasick直接处理多字节字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM