Подтвердить что ты не робот

Прочитать файл с символами Unicode

У меня есть страница asp.net С#, и я пытаюсь прочитать файл с следующим charater и преобразовать его в '. (От наклонного апострофа до апострофа).

FileInfo fileinfo = new FileInfo(FileLocation);
string content = File.ReadAllText(fileinfo.FullName);

//strip out bad characters
content = content.Replace("’", "'");

Это не работает, и он изменяет наклонные апострофы? знаки.

4b9b3361

Ответ 1

Я подозреваю, что проблема связана не с заменой, а с чтением самого файла. Когда я попробовал это сделать (используя Word и copy-paste), я оказался с теми же результатами, что и вы, однако, изучая content, показал, что структура .Net считает, что символ был символом Unicode 65533, то есть "WTF?" символ перед заменой строки. Вы можете проверить это самостоятельно, изучив соответствующий символ в отладчике Visual Studio, где он должен показать код символа:

content[0]; // 65533 '�'

Причина, по которой замена не работает, проста - content не содержит строку, которую вы ей дали:

content.IndexOf("’"); // -1

Что касается того, почему чтение файла не работает должным образом - вы, вероятно, используете неправильную кодировку при чтении файла. (Если кодировка не указана, инфраструктура .Net будет пытаться определить правильную кодировку для вас, однако нет 100% надежного способа сделать это, и поэтому часто она может ошибиться). Точная кодировка, которая вам нужна, зависит от самого файла, однако в моем случае используемая кодировка была Extended ASCII, и поэтому для чтения файла я просто нужно указать правильную кодировку:

string content = File.ReadAllText(fileinfo.FullName, Encoding.GetEncoding("iso-8859-1"));

(См. этот вопрос).

Вам также необходимо убедиться, что вы указываете правильный символ в своей заменяющей строке - при использовании "нечетных" символов в коде вам может быть более надежно указывать символ по его коду символов, а не как строковый литерал ( что может вызвать проблемы при изменении кодировки исходного файла), например, для меня работало следующее:

content = content.Replace("\u0092", "'");

Ответ 2

// This should replace smart single quotes with a straight single quote

Regex.Replace(content, @"(\u2018|\u2019)", "'");

//However the better approach seems to be to read the page with the proper encoding and leave the quotes alone
var sreader= new StreamReader(fileInfo.Create(), Encoding.GetEncoding(1252));

Ответ 3

Моя ставка - это файл, закодированный в Windows-1252. Это почти то же самое, что и ISO 8859-1. Разница заключается в том, что Windows-1252 использует "отображаемые символы, а не управляющие символы в диапазоне от 0x80 до 0x9F". (Где находится наклонный апостроф, т.е. 0x92)

//Specify Windows-1252 here
string content = File.ReadAllText(fileinfo.FullName, Encoding.GetEncoding(1252));
//Your replace code will then work as is
content = content.Replace("’", "'");

Ответ 4

Если вы используете String (capized), а не string, он должен иметь возможность обрабатывать любой Unicode, который вы набрасываете на него. Попробуйте это сначала и посмотрите, работает ли это.