Неверное отображение строк из dbf файла
Суть вопроса: Подключаюсь к 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);
}
}
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);
}
}
Был бы признателен за совет по этому поводу, т.к. кроме ответа в Интернетах "пиши сам" на других форумах не встретил.
Заранее спасибо!
Код:
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
erg=WideCharToMultiByte(CP_UTF8, 0, w, -1, text, ARRAY_SIZE, 0, 0); // UNICODE
AnsiToOem почти помогает. Большая часть букав показывает как надо. Получается что-то вроде
Может кто знает что делать?
Воооооот...
Я в кодировках совсем вообще не шарю. Подскажите, кто знает.
Смотри таблицу и попробуй указать верный charset в строке подключения
Код:
MultiByteToWideChar(1251, 0, chr, -1, wchr, len);
WideCharToMultiByte(866, 0, wchr, len,chr,len, 0,0);
WideCharToMultiByte(866, 0, wchr, len,chr,len, 0,0);
Изменение charset в строке подключения вообще никак не повлияло на текст.
Когда писал парсер, брал букавки из файла в массивчик и все работало. А так не рабтает.
Залей куда-нибудь немаленький кусок байт и кинь ссылку сюда.
этого файла считывать записи
Но идейка мне кажется тухлой - в BDE администраторе нет cp1251 для dBASE
В конце концов тебе проще просто считать базу как файл - формат там достаточно простенький
Или как одынъэсники советуют - в реестре поправить ключики для кодировок cp1250,1251,1252 указать 1251 nls
cp1251 кодировка записей в базе, но в заголовке dbf файла указано ANSI - попробуй с
Но идейка мне кажется тухлой - в BDE администраторе нет cp1251 для dBASE
В конце концов тебе проще просто считать базу как файл - формат там достаточно простенький
Или как одынъэсники советуют - в реестре поправить ключики для кодировок cp1250,1251,1252 указать 1251 nls
Цитата: arrjj
cp1251 кодировка записей в базе, но в заголовке dbf файла указано ANSI - попробуй с этого файла считывать записи
Но идейка мне кажется тухлой - в BDE администраторе нет cp1251 для dBASE
В конце концов тебе проще просто считать базу как файл - формат там достаточно простенький
Или как одынъэсники советуют - в реестре поправить ключики для кодировок cp1250,1251,1252 указать 1251 nls
Но идейка мне кажется тухлой - в BDE администраторе нет cp1251 для dBASE
В конце концов тебе проще просто считать базу как файл - формат там достаточно простенький
Или как одынъэсники советуют - в реестре поправить ключики для кодировок cp1250,1251,1252 указать 1251 nls
При попытке считать из "этого" файла, мне говорят, что я неправ:
Объект 'ugra_fixed.dbf' не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.
Похоже, что придется действительно просто считать, как бы мне этого не хотелось бы делать. Хотя я еще надеюсь на лучшее:)
Цитата: plastictown
Цитата: arrjj
cp1251 кодировка записей в базе, но в заголовке dbf файла указано ANSI - попробуй с этого файла считывать записи
Но идейка мне кажется тухлой - в BDE администраторе нет cp1251 для dBASE
В конце концов тебе проще просто считать базу как файл - формат там достаточно простенький
Или как одынъэсники советуют - в реестре поправить ключики для кодировок cp1250,1251,1252 указать 1251 nls
Но идейка мне кажется тухлой - в BDE администраторе нет cp1251 для dBASE
В конце концов тебе проще просто считать базу как файл - формат там достаточно простенький
Или как одынъэсники советуют - в реестре поправить ключики для кодировок cp1250,1251,1252 указать 1251 nls
При попытке считать из "этого" файла, мне говорят, что я неправ:
Объект 'ugra_fixed.dbf' не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.
Похоже, что придется действительно просто считать, как бы мне этого не хотелось бы делать. Хотя я еще надеюсь на лучшее:)
Тебе ведь дело советуют:
Проверьте существование объекта и правильность имени и пути.
Ну дык все на месте. Много раз проверял. Всяческими редакторами открывается. Прочитал заголовок своей таблицы, значение в поле "кодировка" 0. Вот уже пишу руками, но все равно хочется понять в чем дело.