С# dbase IV читать специальные символы

это мой первый пост, и я хочу поблагодарить всех за многолетнюю помощь. Это первый раз, когда я использую форум, и я думаю, что здесь лучший. Итак, хватит об этом :-) У меня есть следующий код:

public void ConnectToDBF(string pathToFile, string fileName)
     {
         string constr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathToFile + ";Extended Properties=\"dBASE IV;CharacterSet=1251;IMEX=1\"";
         using (OleDbConnection con = new OleDbConnection(constr))
         {
             var sql = "select * from " + fileName;
             OleDbCommand cmd = new OleDbCommand(sql, con);
             con.Open();
             DataSet dsMyDbfFile = new DataSet(); ;
             OleDbDataAdapter da = new OleDbDataAdapter(cmd);
             da.Fill(dsMyDbfFile);
             con.Close();

             DataRow drMyDbfFile = dsMyDbfFile.Tables[0].Rows[0];
             string test = drMyDbfFile[0].ToString();

             Encoding wind1251 = Encoding.GetEncoding(1251);
             Encoding utf8 = Encoding.UTF8;
             byte[] wind1251Bytes = wind1251.GetBytes(drMyDbfFile[5].ToString());
             byte[] utf8Bytes = Encoding.Convert(wind1251, utf8, wind1251Bytes);
             string utf8String = Encoding.UTF8.GetString(utf8Bytes);

         }

Я попытался получить некоторые данные из файла dbf, и он отлично работает. Но когда в нем есть специальные символы, такие как ä, ö, é или что-то в этом роде, я получаю только вопросительный знак или другие запутанные символы. Я попытался добавить кодировку непосредственно в строку подключения, но безуспешно. Затем я попытался преобразовать его позже, но он все еще не работает. Я действительно не знаю, где ошибка, и я надеюсь, что кто-нибудь из вас может мне помочь. С уважением!


person MrProud    schedule 27.01.2017    source источник
comment
Зачем все эти преобразования кодировки? Если вы выполните drMyDbfFile[5].ToString(), который неявно применит кодировку, разве это не правильно?   -  person Gusman    schedule 27.01.2017
comment
да, он просто закодирует столбец 5 текущей строки. В моем продукте это цикл по всему файлу БД. Но кодировка не работает :-(   -  person MrProud    schedule 30.01.2017


Ответы (1)


Вы должны использовать скобки [] в имени файла

См. эту задачу

how-to-access-an-column- со специальными символами

или вставить в sql db строку, содержащую специальный символ< /а>

или Работа с ADO.net и специальными символами в SQL

person ELTEYAB    schedule 27.01.2017
comment
Вы имеете в виду скобки вместо * или вокруг переменной fileName? До сих пор я пытался использовать переменную fileName, но это не сработало. Есть еще? вместо специального символа - person MrProud; 30.01.2017