项目最近开始向版署申请版号,反馈的一项修改内容,是聊天屏蔽字库简繁混合未能屏蔽。比如“abc”和“ABC”都能屏蔽,但是类似"AbC”,“aBC”这些不能屏蔽(大小写代替简繁体)。
上网查了下资料,最后的解决方案是,把发送字符全部转为简体,然后在跟屏蔽字库的字符进行比较。
代码实现如下,接口是给lua使用:
static int luaA_simplify(lua_State *L)
{
size_t l;
std::wstring src = MByteToWChar(luaL_checklstring(L, 1, &l));
WORD wLanguageID = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED) ;
LCID Locale = MAKELCID( wLanguageID, SORT_CHINESE_PRC ) ;//0x0804
int len = LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE, src.c_str(), -1, NULL, 0 );
wchar_t* pszGbs = new wchar_t[ len ];
LCMapStringW( Locale, LCMAP_SIMPLIFIED_CHINESE, src.c_str(), -1, pszGbs, len );
std::string des = WCharToMByte(pszGbs);
delete [] pszGbs;
tolua_pushstring(L, des.c_str());
return 1;
}