Подозреваю, что проблема не в замене, а в чтении самого файла. Когда я попробовал это по-своему (используя Word и copy-paste), я получил те же результаты, что и вы, однако изучение content
показало, что .Net Framework считает, что этот символ был символом Unicode 65533
, т.е. WTF?» символ перед заменой строки. Вы можете проверить это самостоятельно, изучив соответствующий символ в отладчике Visual Studio, где должен отображаться код символа:
content[0]; // 65533 '�'
Причина, по которой замена не работает, проста - content
не содержит строку, которую вы ей дали:
content.IndexOf("’"); // -1
Что касается того, почему чтение файла не работает должным образом - вы, вероятно, используете неправильную кодировку при чтении файла. (Если кодировка не указана, то .Net Framework попытается определить правильную кодировку для вас, однако не существует 100% надежного способа сделать это, и очень часто она может ошибиться). Точная кодировка, которая вам нужна, зависит от самого файла, однако в моем случае использовалась кодировка Extended ASCII , поэтому для чтения файла мне просто нужно было указать правильную кодировку:
string content = File.ReadAllText(fileinfo.FullName, Encoding.GetEncoding("iso-8859-1"));
(см. этот вопрос ).
Вам также необходимо убедиться, что вы указали правильный символ в своей замещающей строке - при использовании «нечетных» символов в коде может оказаться более надежным указывать символ по его символьному коду, а не как строковый литерал ( что может вызвать проблемы при изменении кодировки исходного файла), например, у меня сработало следующее:
content = content.Replace("\u0092", "'");