开始之前;是的,我知道这是一个重复的问题,是的,我已经查看了已发布的解决方案。我的问题是我无法让他们工作。
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, AEgyptians”上测试了这个方法,但它什么也没做
我还尝试用 isprint
代替 isalnum
真正的问题发生在我程序的另一部分我转换 string->wstring->string 时。如果 string->wstring 转换中存在 unicode 字符,则转换会失败。
引用:
How can you strip non-ASCII characters from a string? (in C#)
How to strip all non alphanumeric characters from a string in c++?
编辑:
不管是否有帮助,我仍然想删除所有非 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命令
最佳答案
解决方法:
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 命令
关于C++ 从字符串中去除非 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178700/