Как решить проблему извлечения таблицы excel с арабским языком
я экспортирую большую таблицу с большими данными в лист excel/.csv с арабскими буквами.
есть проблема, которую я получаю, когда открываю лист, я получаю такие арабские буквы(/*0%&#@*!*$&@$^#@%*@#4)
есть ли какие-то проблемы с моим кодом или я должен использовать другой код?
<pre>public void DumpTableToFile(SqlConnection connection, string tableName, string destinationFile) { using (var command = new SqlCommand("select * from table " , connection)) using (var reader = command.ExecuteReader()) using (var outFile = File.CreateText(destinationFile)) { string[] columnNames = GetColumnNames(reader).ToArray(); int numFields = columnNames.Length; outFile.WriteLine(string.Join(",", columnNames)); if (reader.HasRows) { while (reader.Read()) { string[] columnValues = Enumerable.Range(0, numFields) .Select(i => reader.GetValue(i).ToString()) .Select(field => string.Concat("\"", field.Replace("\"", "\"\""), "\"")) .ToArray(); outFile.WriteLine(string.Join(",", columnValues)); } } } } private IEnumerable<string> GetColumnNames(IDataReader reader) { foreach (DataRow row in reader.GetSchemaTable().Rows) { yield return (string)row["ColumnName"]; } } private void Button5_Click(object sender, EventArgs e) { SqlConnection _connection = new SqlConnection(); SqlDataAdapter _dataAdapter = new SqlDataAdapter(); SqlCommand _command = new SqlCommand(); DataTable _dataTable = new DataTable(); _connection = new SqlConnection(); _dataAdapter = new SqlDataAdapter(); _command = new SqlCommand(); _dataTable = new DataTable(); //dbk is my database name that you can change it to your database name _connection.ConnectionString = "connaction"; _connection.Open(); SaveFileDialog saveFileDialogCSV = new SaveFileDialog(); saveFileDialogCSV.InitialDirectory = Application.ExecutablePath.ToString(); saveFileDialogCSV.Filter = "CSV files (*.csv)|*.csv|All files (*.*)|*.*"; saveFileDialogCSV.FilterIndex = 1; saveFileDialogCSV.RestoreDirectory = true; string path_csv = ""; if (saveFileDialogCSV.ShowDialog() == DialogResult.OK) { // Runs the export operation if the given filenam is valid. path_csv = saveFileDialogCSV.FileName.ToString(); } DumpTableToFile(_connection, "tbl_trmc", path_csv); } }
Что я уже пробовал:
var utf8 = new UTF8Encoding(); ... string[] columnValues = Enumerable.Range(0, numFields) .Select(i => { if (reader[i].GetType() == typeof(SqlString)) { SqlString sqlString = reader.GetSqlString(i); Byte[] encodedBytes = sqlString.GetNonUnicodeBytes(); return "\"" + utf8.GetString(encodedBytes) + "\""; } else { return "\"" + reader[i].ToString() + "\""; } }).ToArray(); ...
Richard MacCutchan
- есть проблема, которую я получаю, когда открываю лист"
И вы хотите, чтобы мы догадались, в чем заключается эта проблема?
el_tot93
извините, что я обновляю это
Richard MacCutchan
Похоже, что ваш код выполняет какое-то преобразование данных. Используйте свой отладчик, чтобы проверить, правильно ли он это делает.
el_tot93
я стараюсь, чтобы не было никаких проблем
Richard MacCutchan
Тогда он должен быть в отображении извлеченных данных. Приложение должно установить правильную культуру для правильного отображения этих символов.