#c_sharp #dbf
Есть dbf файл, созданный Visual Fox Pro. Его я менять не могу, могу только читать. Читаю conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\;Extended Properties=dBASE IV;User ID=;Password=;"; conn.Open(); OleDbCommand comm = conn.CreateCommand(); comm.CommandText = @"SELECT NOMER, FEMGN, FEOBS, DATA, TIME FROM ANALIZ"; dt.Load(comm.ExecuteReader()); column = dt.Columns[0]; row = dt.Rows[0]; result = row[column].ToString(); dataGridView1.DataSource = dt Но в файле кодировка dos. Необходимо привести к utf -8. Пытаюсь так - не получается var fromEncodind = Encoding.GetEncoding(866);//из какой кодировки var bytes = fromEncodind.GetBytes(o); var toEncoding = Encoding.UTF8;//в какую кодировку string ans = toEncoding.GetString(bytes); Видимо из базы уже получаю корявую строку. Подскажите как в запросе к dbf указать кодировку
Ответы
Ответ 1
DBF таблицы с кодировкой 866 грузится нормально, если загружать через OLE DB Provider for Visual FoxPro 9.0 private void LoadTable(string path, DataGridView dataGrid) { try { var connectionString = "Provider=VFPOLEDB.1;Data Source=" + path + ";Collating Sequence=MACHINE"; var con = new OleDbConnection(connectionString); con.Open(); var adapter = new OleDbDataAdapter("SELECT * FROM " + Path.GetFileNameWithoutExtension(path), con); con.Close(); var dataSet = new DataSet(); adapter.Fill(dataSet); dataGrid.DataSource = dataSet.Tables[0]; } catch (Exception err) { MessageBox.Show(err.Message + " " + path, "Ошибка открытия DBF таблицы", MessageBoxButtons.OK, MessageBoxIcon.Error); } }Ответ 2
помимо Provider=VFPOLEDB.1 из ответа Мурада, в случае английской винды еще потребуется: var value = ds.Tables[0].Rows[0][1]; string encodedValue = Encoding.UTF8.GetString((Encoding.Convert(Encoding.GetEncoding(866), Encoding.UTF8, Encoding.Default.GetBytes(value.ToString()))));
Комментариев нет:
Отправить комментарий