2009-08-13 3 views
2

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

ответ

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 вместо этого? – bsh152s

+0

Использование UTF-8 - это гораздо лучшая идея, да, но вам нужно убедиться, что вы всегда знаете, что такое кодировка. Можете ли вы гарантировать, что файл будет * всегда * сохранен как UTF-8? –

2

Вы должны проверить три вещи:

  1. Кодирование используется при открытии StreamReader
  2. Тип столбца на сервере базы данных (NVARCHAR вместо VARCHAR)
  3. Сопоставление фактически для столбец

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

Смежные вопросы