Прежде чем вы начнете; да, я знаю, что это повторяющийся вопрос, и да, я просмотрел опубликованные решения. Моя проблема в том, что я не мог заставить их работать.
bool invalidChar (char c)
{
return !isprint((unsigned)c);
}
void stripUnicode(string & str)
{
str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end());
}
Я испытал этот метод на «Прусее,египтяне", и это ничего не сделало Я также попытался заменить isprint
на isalnum
. Настоящая проблема возникает, когда в другом разделе моей программы я конвертирую строку ->wstring ->строку. преобразование блокируется, если в строке ->wstring есть символы Юникода.
Ссылка:
Как удалить из строки символы, отличные от -ASCII? (в C#)
Как удалить все небуквенно-цифровые символы из строки в 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 )
Изменить:
Дальнейшее усугубление вопроса :файл.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