Замена символов из строки
Мой код следующий (сокращенный):
CComVariant * input является входным параметром
CString cstrPath(input ->bstrVal);
const CHAR cInvalidChars[] = {"/*&#^°\"§$[]?´`\';|\0"};
for (unsigned int i = 0; i < strlen(cInvalidChars); i++)
{
cstrPath.Replace(cInvalidChars[i],_T(''));
}
При отладке значение cstrPath равно L"§", значение cInvalidChars[7] равно -89 '§'
Я пытался использовать.Remove() раньше, но проблема остается той же: когда дело доходит до § или ´, таблица кодов, кажется, не совпадает, и символ не распознается должным образом и не будет удален. использование массива TCHAR для invalidChars приводит даже к различным проблемам ('§' -> 'ᄡ'). Кажется, проблема в том, что я не использую правильные кодовые таблицы, но все, что я пробовал до сих пор, не привело ни к какому успеху. Я хочу успешно заменить / удалить любой встречающийся '§'..
Я также посмотрел несколько "Удалить символ из строки"-Posts, но я не нашел ничего, что мне помогло.
исполняемый код:
CComVariant* pccovaValue = new CComVariant();
pccovaValue->bstrVal = L"§§";
const CHAR cInvalidChars[] = {"§"};
CString cstrPath(pccovaValue->bstrVal);
for (unsigned int i = 0; i < strlen(cInvalidChars); i++)
{
cstrPath.Remove(cInvalidChars[i]);
}
cstrPath = cstrPath;
просто взломать cstrPath = cstrPath;
1 ответ
Согласно комментариям, вы смешиваете кодировки Unicode и ANSI. Кажется, что ваше приложение нацелено на Unicode, что хорошо. Вы должны полностью прекратить использование ANSI.
декларировать cInvalidChars
как это:
CString cInvalidChars = L"/*&#^°\"§$[]?´`\';|";
Использование L
Префикс означает, что строковый литерал является широким символом литерала UTF-16.
Тогда ваш цикл может выглядеть так:
for (int i = 0; i < cInvalidChars.GetLength(); i++)
cstrPath.Remove(cInvalidChars[i]);