В С# я читаю инструкции вставки SQL из текстового файла, а затем пытаюсь выполнить их в базе данных с помощью ADO.NET. Некоторые из запросов включают греческий символ в одном из столбцов. В частности, Mu (funky looking u), который используется для микросекунд (usec). Проблема в том, что вопросительные знаки фактически вставляются в базу данных (? Sec). Но у меня есть ощущение, что проблема заключается в чтении текстового файла, потому что отладчик также показывает знак вопроса внутри алмаза. Я использую метод ReadLine для StreamReader. Что я делаю неправильно?
Проблема почти наверняка заключается в том, что вы используете неправильную кодировку при чтении файла. Вы знаете, что на самом деле кодирует ваш текстовый файл? Большинство .NET API используют UTF-8 по умолчанию, но ваш файл может находиться в кодировке по умолчанию для операционной системы, которая представлена Encoding.Default. Попробуйте следующее:
using (StreamReader reader = new StreamReader(filename, Encoding.Default))
{
...
}
Я также настоятельно рекомендую вам попробовать работать, не касаясь базы данных. Прочитайте в файле, затем распечатайте символы в строке с точки зрения их кодировки Unicode:
public static void DumpString(string text)
{
Console.WriteLine("Text: '{0}'", text);
foreach (char c in text)
{
Console.WriteLine("{0}: U+{1:x4}", c, (int) c);
}
}
Если это дает правильные результаты, попробуйте вставить его в базу данных. Таким образом, если база данных по-прежнему выглядит "неправильно", вы знаете, что проблема связана с доступом к базе данных, а не с доступом к файлу.
Вам нужно проверить три вещи:
Если какая-либо из этих ошибок неверна, вы получите неправильное значение при чтении данных из БД.