C++ 从字符串中去除非 ASCII 字符

标签 c++ string ascii

开始之前;是的,我知道这是一个重复的问题,是的,我已经查看了已发布的解决方案。我的问题是我无法让他们工作。

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/

相关文章:

c++ - 强制执行某种类型的可变参数模板

c++ - 调试 websocket++ broadcast_server.cpp ('owner_less' 不是 'std' 的成员)

java - 用 Java 写入文本文件

string - 根据图层部分名称匹配选择堆栈中的栅格

java - 确定 ISO-8859-1 与 US-ASCII 字符集

c++ - 构造结构&

python - 检查字符串是否可以在 Python 中转换为 float

Java:将字符串转换为压缩十进制

c# - FtpWeb 请求错误 : 550 Size not allowed in ASCII mode

c++ - 为什么我不能在绑定(bind)中使用 mem_fn Functor?