Покойно, и мой кофеин IV работает низко, поэтому мой ум - это месиво, и у меня возникают проблемы с поиском решения того, что, по моему мнению, является простой проблемой кодирования (у меня почти нет опыта с).Некорректное кодирование, вызывающее проблемы с запросом DB
У меня есть БД, использующий EF6 Code First, и все, кажется, работает хорошо, пока я не скопирую какой-либо текст с форума сайта, содержащегося в кодеблоке. Я проверил заголовок и предположительно закодирован в UTF-8.
Я по существу беру этот текст, разбиваю его на массив строк и проверяю БД на запись, соответствующую строке в каждой строке. Все шло хорошо, пока я не столкнулся с проблемой с строкой «Magnеtic», не соответствующей ни на что в моей таблице DB, но когда я вошел в SQLMS и запросил таблицу с LIKE «% Magnеtic%», я получил результат.
Я уронил текст с веб-сайта в Notepad ++ с текстом из запроса DB и увидел, что они выглядят равными:
Magnеtic
Magnеtic
Затем я изменил кодировку ANSI, и он показал:
Magnetic <--From DB
Magnеtic <--From website
В моей голове появилась крошечная лампочка, но мои попытки исправить эту проблему потерпели неудачу.
Я попытался с помощью различных методов, но я думаю, что мой мозг жареным атаковать проблему с неправильными инструментами:
string.compare(a, b) == 0
string.equals(a, b)
string.ToUpperInvariant()
и, вероятно, несколько других, которые я не могу вспомнить.
Итак, теперь вы знаете, в чем моя проблема, и я чувствую, что это такая простая проблема, но, как я уже сказал, я жареная и теперь нуждаюсь в помощи сообщества.
Я не профессиональный кодер, больше любитель, поэтому я не могу использовать лучшие практики или передовые методы, чтобы что-то делать.
Редактировать: Сегодня я сделал еще несколько поисков и нашел несколько методов, которые не сработали.
private string RemoveAccent(string txt)
{
byte[] bytes = Encoding.GetEncoding("Cyrillic").GetBytes(txt);
return Encoding.ASCII.GetString(bytes);
}
Этот, как представляется, удаляет акцентированные символы кириллической кодировки. Результат был не таким, как ожидалось, но он дал эффект. Результаты:
Magn?tic <- Computer interpretation
Magnetic <- Visual representation
Я также попытался:
private string RemoveAccent2(string txt)
{
char[] toReplace = "àèìòùÀÈÌÒÙ äëïöüÄËÏÖÜ âêîôûÂÊÎÔÛ áéíóúÁÉÍÓÚðÐýÝ ãñõÃÑÕšŠžŽçÇåÅøØ".ToCharArray();
char[] replaceChars = "aeiouAEIOU aeiouAEIOU aeiouAEIOU aeiouAEIOUdDyY anoANOsSzZcCaAoO".ToCharArray();
for (int i = 0; i < toReplace.Count(); i++)
{
txt = txt.Replace(toReplace[i], replaceChars[i]);
}
return txt;
}
Этот метод не предусматривает каких-либо изменений.
Спасибо за ваш ответ, @svick.Итак, если я получаю две визуально идентичные строки, но компьютер интерпретирует их как разные, как я могу нормализовать весь текст, который приходит, чтобы я мог сравнивать то, что я вижу, а не то, что компьютер интерпретирует? – Josh
@ Josh Я не думаю, что есть что-то в этом роде, тем более, что разные шрифты могут вести себя по-другому. – svick