在开始之前;是的,我知道这是一个重复的问题,是的,我已经查看了发布的解决方案。我的问题是我无法让他们工作。
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,埃及人”上测试了这种方法,但它没有任何作用
我也尝试过替代isprint
for isalnum
当我在程序的另一部分中转换 string->wstring->string 时,真正的问题发生了。如果 string->wstring 转换中存在 unicode 字符,则转换会停止。
Ref:
如何从字符串中去除非 ASCII 字符? (在 C# 中) https://stackoverflow.com/questions/123336/how-can-you-strip-non-ascii-characters-from-a-string-in-c
如何从 C++ 字符串中删除所有非字母数字字符? https://stackoverflow.com/questions/6319872/how-to-strip-all-non-alphanumeric-characters-from-a-string-in-c
Edit:
我仍然想删除所有非 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)
Edit:
更复杂的是:我正在读取的 .txt 文件是 ANSI 编码的。里面的一切should是有效的。
解决方案:
bool invalidChar (char c)
{
return !(c>=0 && c <128);
}
void stripUnicode(string & str)
{
str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end());
}
如果其他人想复制/粘贴此内容,我可以勾选此问题。
EDIT:
供将来参考:尝试使用__isascii,iswascii http://msdn.microsoft.com/en-us/library/5wcd48xw.aspx命令