Как мне прочитать специальные символы из файла?

2

В С# я читаю инструкции вставки SQL из текстового файла, а затем пытаюсь выполнить их в базе данных с помощью ADO.NET. Некоторые из запросов включают греческий символ в одном из столбцов. В частности, Mu (funky looking u), который используется для микросекунд (usec). Проблема в том, что вопросительные знаки фактически вставляются в базу данных (? Sec). Но у меня есть ощущение, что проблема заключается в чтении текстового файла, потому что отладчик также показывает знак вопроса внутри алмаза. Я использую метод ReadLine для StreamReader. Что я делаю неправильно?

Теги:
string
ado.net

2 ответа

4
Лучший ответ

Проблема почти наверняка заключается в том, что вы используете неправильную кодировку при чтении файла. Вы знаете, что на самом деле кодирует ваш текстовый файл? Большинство .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);
    }
}

Если это дает правильные результаты, попробуйте вставить его в базу данных. Таким образом, если база данных по-прежнему выглядит "неправильно", вы знаете, что проблема связана с доступом к базе данных, а не с доступом к файлу.

  • 0
    Это, казалось, сделало трюк. Но я не уверен, что понимаю всю эту кодировку. Что делать, если другой пользователь с другой кодировкой по умолчанию изменяет файл, а затем я пытаюсь повторно запустить мое приложение с новым файлом. Это больше не будет работать? Должен ли я использовать Encoding.UTF8 вместо этого?
  • 0
    Да, использование UTF-8 - гораздо лучшая идея, но вы должны убедиться, что вы всегда знаете, что такое кодировка. Можете ли вы гарантировать, что файл всегда будет сохранен как UTF-8?
2

Вам нужно проверить три вещи:

  • Кодировка, используемая при открытии StreamReader
  • Тип столбца на сервере базы данных (nvarchar, а не varchar)
  • Соответствие для столбца

Если какая-либо из этих ошибок неверна, вы получите неправильное значение при чтении данных из БД.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню