Либо используйте черный список вещей, которые вам не нужны, либо желательно белый список (установлен). С белым списком вы перебираете строку и копируете только буквы из белого списка в строку результата. Вы сказали удалить, и способ, которым вы делаете это, имеет два указателя, один из которых вы читаете из (R), а другой - в (W):
I Donââ‚
W R
если запятая находится в вашем белом списке, то в этом случае вы прочитаете запятую и напишите ее, где Ã, а затем передвиньте оба указателя. UTF-8 является многобайтовой кодировкой, поэтому продвижение указателя может быть не просто добавлением к адресу.
С помощью C легко получить белый список с помощью одной из предопределенных функций (или макросов): isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit. В этом случае вы отправляете с функцией белого списка вместо набора курса.
Обычно, когда я вижу такие данные, как у вас, я ищу повреждение памяти или свидетельство того, что ожидаемая кодировка отличается от той, с которой были введены данные.
/ Аллан