Я пытаюсь заменить некоторые нежелательные символы в строке, извлеченной из электронной таблицы Excel. Причина в том, что в нашей базе данных Oracle используется набор символов WE8ISO8859P1, который не определяет несколько символов, которые Excel «услужливо» вставляет для вас в тексте (фигурные кавычки, em и en dashes и т. Д.), Поскольку я не имею никакого контроля над базой данных или как создаются электронные таблицы Excel, мне нужно заменить символы чем-то другим.
Я извлекаю содержимое ячейки в строку таким образом:
string s = xlRange.get_Range("A1", Missing.Value).Value2.ToString().Trim();
Просмотр строки в текстовом редакторе Visual Studio Визуализатор показывает текст, который будет завершен и правильно извлечен. Далее я пытаюсь заменить один из нежелательных символов (в данном случае правый символ фигурной кавычки):
s = Regex.Replace(s, "\u0094", "\u0022");
Но он ничего не делает (Text Visualiser показывает, что он все еще там). Чтобы попытаться проверить, что символ, который я хочу заменить, действительно присутствует, я попытался:
bool a = s.Contains("\u0094");
но возвращается false. Тем не менее:
bool b = s.Contains("”");
возвращает истину.
Мое (несколько недостающее) понимание строк в .NET заключается в том, что они кодируются в UTF-16, тогда как Excel, вероятно, будет использовать ANSI. Значит ли это, что мне нужно изменить кодировку текста в Excel? Или я здесь что-то не так делаю? Любой совет будет принята с благодарностью. Я прочитал и перечитал все статьи, которые я могу найти о Юникоде и кодировке, но я все еще не знаю.