在你开始之前;是的,我知道这是一个重复的问题,是的,我已经查看了发布的解决方案。我的问题是我无法让他们工作。
bool invalidChar (char c)
{
return !isprint((unsigned)c);
}
void stripUnicode(string & str)
{
str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end());
}
我在“Prusæus, Ægyptians”上测试了这种方法,但它没有做任何我也试图替代isprint
的方法isalnum
当我在程序的另一部分转换 string->wstring->string 时,就会出现真正的问题。如果 string->wstring 转换中有 unicode 字符,则转换会停止。
参考:
编辑:
我仍然想删除所有非 ASCII 字符,不管它是否有帮助,这就是我崩溃的地方:
// Convert to wstring
wchar_t* UnicodeTextBuffer = new wchar_t[ANSIWord.length()+1];
wmemset(UnicodeTextBuffer, 0, ANSIWord.length()+1);
mbstowcs(UnicodeTextBuffer, ANSIWord.c_str(), ANSIWord.length());
wWord = UnicodeTextBuffer; //CRASH
错误对话框
MSVC++ 调试库
调试断言失败!
程序://我的项目
文件:f:\dd\vctools\crt_bld\self_x86\crt\src\isctype.c
行://以上
表达式:(无符号)(c+1)<=256
编辑:
更复杂的是:我从中读取的 .txt 文件是 ANSI 编码的。里面的一切都应该是有效的。
解决方案:
bool invalidChar (char c)
{
return !(c>=0 && c <128);
}
void stripUnicode(string & str)
{
str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end());
}
如果其他人想复制/粘贴这个,我可以勾选这个问题。
编辑:
供将来参考:尝试使用__isascii、iswascii命令