Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2012, 23:31   #1
.scu
Пользователь
 
Регистрация: 25.07.2009
Сообщений: 13
Вопрос перекодировка DBF файла из cp1251 в UTF-8

Есть dbf файл (база БИК), он сохранен в cp1251, как данные из него перекодировать в UTF-8?
.scu вне форума Ответить с цитированием
Старый 09.07.2012, 23:58   #2
.scu
Пользователь
 
Регистрация: 25.07.2009
Сообщений: 13
По умолчанию

пробовала так, но не получается

Код:

var table = new List<Items>();

            var connection = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=" + Directory.GetCurrentDirectory() + ";Codepage=1251");

            var commandText = connection.CreateCommand();
            commandText.CommandText = "Select * From bnkseek.dbf";
            connection.Open();

            using (var reader = commandText.ExecuteReader())
            {

                while (reader != null && reader.Read())
                {

                    byte[] A = Encoding.GetEncoding(Encoding.Default.CodePage).GetBytes(reader.GetString(12));
                    string p = Encoding.Unicode.GetString((Encoding.Convert(Encoding.GetEncoding(1251), Encoding.Unicode, A)));

                    MessageBox.Show(reader[0].ToString() + p);
                    break;
                   
                }
            }
сам файл базы бик: http://www.pvision.ru/download/bp/bik/bik0709.zip
.scu вне форума Ответить с цитированием
Старый 10.07.2012, 07:49   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А почему в UTF?
Я тоже когда-то задавался вопросом как перекодить. Ничего лучше не нашел кроме как
Код:
Select CPCONVERT(866,1251,name) From таблица
Где name - поле, которое нужно перекодировать
866 - кодировка поля
1251 - кодировка на выходе.
Остается узнать код кодировки UTF, и попробовать применить в запросе для текстовых полей.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.07.2012, 08:39   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а расскажите мне, пожалуйста, суть решаемой задачи...
читается 12 байт, а потом перекодируется из 1251 в Unicode ?!
а зачем всё это?!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.07.2012, 01:38   #5
.scu
Пользователь
 
Регистрация: 25.07.2009
Сообщений: 13
По умолчанию

Чтобы текст выводился корректно (без перекодировки в текст выводится некорректно, бьются символы).
Для чего: чтобы прочитать данные из этой базы и отобразить в диалоговом окне.

Возможно есть способ сделать, чтобы он выводился нормально, если так, расскажите как
Насколько я поняла, в c# по-умолчанию кодировка UTF-8 для строк, соответственно логично, что не выводятся нормально строги в cp1251.

Спасибо
.scu вне форума Ответить с цитированием
Старый 13.07.2012, 01:40   #6
.scu
Пользователь
 
Регистрация: 25.07.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А почему в UTF?
Я тоже когда-то задавался вопросом как перекодить. Ничего лучше не нашел кроме как
Код:
Select CPCONVERT(866,1251,name) From таблица
Где name - поле, которое нужно перекодировать
866 - кодировка поля
1251 - кодировка на выходе.
Остается узнать код кодировки UTF, и попробовать применить в запросе для текстовых полей.
Вы это пробовали именно для DBF базы? она поддерживает подобный синтаксис внутренней перекодировки на лету ?
.scu вне форума Ответить с цитированием
Старый 14.07.2012, 01:56   #7
.scu
Пользователь
 
Регистрация: 25.07.2009
Сообщений: 13
По умолчанию

пробовала в запросе указывать - ноль эмоций, кажется что она не пытается перекодировать.
.scu вне форума Ответить с цитированием
Старый 14.07.2012, 02:04   #8
.scu
Пользователь
 
Регистрация: 25.07.2009
Сообщений: 13
По умолчанию

ура
помогла просто смена драйвера на
Microsoft.ACE.OLEDB.12.0

все открывается превосходно без перекодировки. Возможно кому-то пожет.
.scu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
расшифровка файла utf-16 сергей сгб Общие вопросы .NET 5 26.04.2012 09:39
Indy. Залить на файлообменник с названием файла в utf-8 droltromed Компоненты Delphi 1 22.01.2012 19:42
Чтение файла в UTF-8(без BOM) Cats_foot Visual C++ 10 06.12.2011 17:27
php перекодировка из utf-8 в windows-1251 world12_tk PHP 3 25.04.2010 22:55
сохранение результата выборки из DBF файла в DBF файл с такой же структурой таблицы GazimagomedovM БД в Delphi 5 06.11.2007 17:58