Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Неверное отображение строк из dbf файла

311
03 декабря 2012 года
plastictown
309 / / 08.01.2006
Доброго времени суток! Заранее извиняюсь за избитую тему.

Суть вопроса: Подключаюсь к dbf файлу на диске. Там несколько полей (заранее известно какие). Все хорошо работает, кроме жутких каракулей вместо строк. Знаю, что кодировка ANSI. И вот что с этим делать, если не работает?

10-я студия

Код:
CDatabase myDb;

if(myDb.OpenEx(TEXT("Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\\;"), 0))
             {
                 CRecordset rec=CRecordset(&myDb);
                 if(rec.Open(CRecordset::dynaset, _T("SELECT * FROM ugra.dbf")))
                 {
                     CDBVariant varValue;
                     
                     rec.MoveFirst();
                     rec.GetFieldValue(_T("FARM_NAME"),varValue);

   
                     AfxMessageBox(*varValue.m_pstring);
                 }

                 

             }
Когда был молодой и здоровый писал на работе парсер ручками, но сейчас потерял, а делать его особо времени не очень.

Был бы признателен за совет по этому поводу, т.к. кроме ответа в Интернетах "пиши сам" на других форумах не встретил.

Заранее спасибо!
414
03 декабря 2012 года
CassandraDied
763 / / 24.05.2012
ANSI to UTF-8.
311
04 декабря 2012 года
plastictown
309 / / 08.01.2006
 
Код:
erg=MultiByteToWideChar(CP_ACP, 0, text, -1, w, ARRAY_SIZE); // ANSI to UNICODE
erg=WideCharToMultiByte(CP_UTF8, 0, w, -1, text, ARRAY_SIZE, 0, 0); // UNICODE
Иероглифы поменялись. Уже хорошо:) Но легче не стало. Ничего осмысленного нету.

AnsiToOem почти помогает. Большая часть букав показывает как надо. Получается что-то вроде
Цитата:
іі нормальный "текст"췍췍﷽﷽ꮫꮫꮫꮫﻮ



Может кто знает что делать?
Воооооот...

Я в кодировках совсем вообще не шарю. Подскажите, кто знает.

277
04 декабря 2012 года
arrjj
1.7K / / 26.01.2011
Смотри таблицу и попробуй указать верный charset в строке подключения
311
05 декабря 2012 года
plastictown
309 / / 08.01.2006
Вот так получается похоже (исходя из крокозябр в Википедии). Кодировка похоже что что cp866.

 
Код:
MultiByteToWideChar(1251, 0, chr, -1, wchr, len);
WideCharToMultiByte(866, 0, wchr, len,chr,len, 0,0);
Но все равно остаются непонятные символы, которые портят всю картину. Буквы 'ы', 'ю', 'ш', 'щ' пишутся как-то не совсем как хотелось бы.
Изменение charset в строке подключения вообще никак не повлияло на текст.

Когда писал парсер, брал букавки из файла в массивчик и все работало. А так не рабтает.
414
05 декабря 2012 года
CassandraDied
763 / / 24.05.2012
Залей куда-нибудь немаленький кусок байт и кинь ссылку сюда.
311
05 декабря 2012 года
plastictown
309 / / 08.01.2006
Много записей

Одна запись

Интересует поле FARM_NAME
277
05 декабря 2012 года
arrjj
1.7K / / 26.01.2011
cp1251 кодировка записей в базе, но в заголовке dbf файла указано ANSI - попробуй с этого файла считывать записи

Но идейка мне кажется тухлой - в BDE администраторе нет cp1251 для dBASE

В конце концов тебе проще просто считать базу как файл - формат там достаточно простенький

Или как одынъэсники советуют - в реестре поправить ключики для кодировок cp1250,1251,1252 указать 1251 nls
311
05 декабря 2012 года
plastictown
309 / / 08.01.2006
Цитата: arrjj
cp1251 кодировка записей в базе, но в заголовке dbf файла указано ANSI - попробуй с этого файла считывать записи

Но идейка мне кажется тухлой - в BDE администраторе нет cp1251 для dBASE

В конце концов тебе проще просто считать базу как файл - формат там достаточно простенький

Или как одынъэсники советуют - в реестре поправить ключики для кодировок cp1250,1251,1252 указать 1251 nls



При попытке считать из "этого" файла, мне говорят, что я неправ:

Цитата:
Объект 'ugra_fixed.dbf' не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.

Похоже, что придется действительно просто считать, как бы мне этого не хотелось бы делать. Хотя я еще надеюсь на лучшее:)

277
05 декабря 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: plastictown
Цитата: arrjj
cp1251 кодировка записей в базе, но в заголовке dbf файла указано ANSI - попробуй с этого файла считывать записи

Но идейка мне кажется тухлой - в BDE администраторе нет cp1251 для dBASE

В конце концов тебе проще просто считать базу как файл - формат там достаточно простенький

Или как одынъэсники советуют - в реестре поправить ключики для кодировок cp1250,1251,1252 указать 1251 nls



При попытке считать из "этого" файла, мне говорят, что я неправ:

Цитата:
Объект 'ugra_fixed.dbf' не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.

Похоже, что придется действительно просто считать, как бы мне этого не хотелось бы делать. Хотя я еще надеюсь на лучшее:)


Тебе ведь дело советуют:
Проверьте существование объекта и правильность имени и пути.

311
06 декабря 2012 года
plastictown
309 / / 08.01.2006
Ну дык все на месте. Много раз проверял. Всяческими редакторами открывается. Прочитал заголовок своей таблицы, значение в поле "кодировка" 0. Вот уже пишу руками, но все равно хочется понять в чем дело.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог