在你开始之前; 是的我知道这是一个重复的问题,是的,我已经查看了发布的解决方案.我的问题是我无法让他们工作.
bool invalidChar (char c)
{
return !isprint((unsigned)c);
}
void stripUnicode(string & str)
{
str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end());
}
Run Code Online (Sandbox Code Playgroud)
我在"Prusæus,Ægyptians"上测试了这种方法,它也没有做任何我试图替代isprint的方法isalnum
真正的问题发生在我的程序的另一部分我转换string-> wstring-> string.如果string-> wstring转换中有unicode字符,则转换为balks.
参考:
编辑:
我仍然想删除所有非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
Run Code Online (Sandbox Code Playgroud)
错误对话框
MSVC++调试库
调试断言失败!
Program:// myproject
文件: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());
}
Run Code Online (Sandbox Code Playgroud)
如果其他人想要复制/粘贴此内容,我可以关闭此问题.
编辑:
供将来参考:尝试使用__isascii,iswascii命令
Ant*_*nyW 12
解:
bool invalidChar (char c)
{
return !(c>=0 && c <128);
}
void stripUnicode(string & str)
{
str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end());
}
Run Code Online (Sandbox Code Playgroud)
编辑:
供将来参考:尝试使用__isascii,iswascii命令
| 归档时间: |
|
| 查看次数: |
25644 次 |
| 最近记录: |