|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Всем добрый день. есть DBF файл в кодировке 1251 (полученный от заказчика - его выгрузил их программер 1С). Стоит задача программно с помощью OLEDB провайдера вычитать текст. С FoxPro я дело никогда не имел - чтение делаю в SQL Server Integration Services пакете, настраивая доступ с помощью Microsoft OLE DB Provider for Visual FoxPro 9.0 - взятого отсюда http://www.microsoft.com/downloads/en/details.aspx?familyid=e1a87d8f-2d58-491f-a0fa-95a3289c5fd4&displaylang=en Не могу этому OLEDB провайдеру "вдолбить" чтобы он считывал данные в кодировке 1251. Пока что вижу кракозяблу - см. картинку. Вопрос: как заставить фоксовый OLEDB провайдер понимать кодовую страницу 1251? Буду ОЧЕНЬ благодарен за любые подсказки. P.S. Здесь вижу подход со взломом vfpoledb.dll - но у меня версия 9.0.0.5815 - не могу найти адрес где надо заменять E4->E3. логика такой замены очевидна: если перевести 1252 в шестнадцатеричное число - выйдет 04E4. Открываем хекс-редактором, ищем все вхождения 04E4 - находим 5 штук, меняем на 04E3 (=1251 в десятичной). Записываем файл. Пробуем считать данные - а фиг там... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 19:09 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Ihor BobakВсем добрый день. есть DBF файл в кодировке 1251 И этому есть подтверждение?(полученный от заказчика - его выгрузил их программер 1С).Вот как раз оттуда такие товарищи по незнанию выгружают часто совсем не то, что говорят. Стоит задача программно с помощью OLEDB провайдера вычитать текст. ... Не могу этому OLEDB провайдеру "вдолбить" чтобы он считывал данные в кодировке 1251.И не сможете. Править надо выгруженный файл. Пока что вижу кракозяблу - см. картинку. Вопрос: как заставить фоксовый OLEDB провайдер понимать кодовую страницу 1251?Не надо его заставлять. Он слишком умный для этого.Буду ОЧЕНЬ благодарен за любые подсказки. P.S. Здесь вижу подход со взломом vfpoledb.dll - но у меня версия 9.0.0.5815 - не могу найти адрес где надо заменять E4->E3. логика такой замены очевидна: если перевести 1252 в шестнадцатеричное число - выйдет 04E4. Открываем хекс-редактором, ищем все вхождения 04E4 - находим 5 штук, меняем на 04E3 (=1251 в десятичной). Записываем файл. Пробуем считать данные - а фиг там...Еще раз - надо правильно указать признак кодовой страницы в самом файле. Если файл не секретный и не слишком большой, то достаточно его выложить сюда для тщательного осмотра, постановки диагноза и выбора терапии. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 19:51 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Для начала, надо убедится, что файл DBF: 1. Имеет установленный признак кодовой страницы 2. Данные в файле действительно храняться в кодовой странице 1251 Признак кодовой страницы записан в 29 байте заголовка таблицы (первый байт имеет порядковый номер 0). Т.е. если открыть файл DBF как обычный текстовый файл, то признак кодовой страницы будет хранится в 30 символе. Там должно быть записано 866 кодовая страница - ASCII код 101 1251 кодовая страница - ASCII код 201 Вполне возможно, что в этот файл данные действительно выгрузили в кодовой странице 1251, вот только в заголовке файла "забыли" указать признак кодовой страницы Только не вздумайте править заголовок DBF в блокноте. Разрушите все окончательно... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 21:14 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
ВладимирМ, c заголовком все ок - смотрите скриншот. В следующем сообщении аттачем пойдет сам файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 22:50 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
DBF-файл приаттачен. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 22:51 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
еще хочу сказать, что при открытии файла в известной программе DBF Viewer 2000 можно четко увидеть, что это ANSI (то есть 1251). В самой проге пользователь задает как он хочет файл смотреть - в режиме ANSI или OEM. Если выбрать ANSI - отображает то, что надо. Поэтому вопрос пока-что открыт, и я буду вам очень благодарен если скажете что не так. P.S. Если с моей стороны еще что-то надо - например, выложить сюда SSIS-пакет или .NET-приложение читающее файл через OLEDB-провайдер 9.0 фокспро - могу это сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 22:56 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Ihor Bobak, C dbf табличкой положить текстовый файл (можно через блокнот) с именем Config.fpw и содержанием Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 09:30 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Ihor Bobak, я глянул файл в VFP9 все ок - 1251 кодировка у меня тоже W7 x64 поставил VFP оле дб провайдер (какой был) по ссылке у меня не открывается в SSIS 2008 появлия оле дб сорс появился но указывая директорию где лежит этот файл SSIS почему то даже не видит списка dbf если укажите ссылку для VFP провайдера - попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 20:31 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Федор, ссылка на провайдер: http://www.microsoft.com/downloads/en/details.aspx?familyid=e1a87d8f-2d58-491f-a0fa-95a3289c5fd4&displaylang=en ccылка работает - только что проверил. Еще раз все настройки: ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2011, 15:03 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Добрался я до Integration Services. Так вот, после установки соединения, если нажать кнопку Preview возникает вот такой диалог В нем ясно говорится, что нужно указать значение либо свойство объекта (OLE DB Source) DefaultCodePage = 1251, либо значение реквизита Local Indentifier = 1033 при создании соединения ADO. По крайней мере, у меня с этии настройками открывается нормально ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 16:39 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Окно настройки свойств соединения ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 16:42 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Окно свойств объекта OLE DB Source ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 16:45 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
ВладимирМ, помогла банальная перезагрузка компа. У меня все свойства были ИМЕННО ТАК, как вы показываете на скриншоте. После перезагрузки открыл записанный проект, ничего не менял. И все работает ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 23:52 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
ВладимирМДобрался я до Integration Services. Так вот, после установки соединения, если нажать кнопку Preview возникает вот такой диалог В нем ясно говорится, что нужно указать значение либо свойство объекта (OLE DB Source) DefaultCodePage = 1251, либо значение реквизита Local Indentifier = 1033 при создании соединения ADO. По крайней мере, у меня с этии настройками открывается нормально Указываю все, как просит этот warning. Что нужно сделать, чтобы этот диалог исчез и больше не появлялся? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 14:48 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Rostislav D. KudryashovАртур Бондаренко, у меня были проблемы с CODEPAGE досовских файлов до установки Visual Foxpro 9 SP2. Потом Фокс стал правильно учитывать признак кодовой страницы в 29-м байте таблицы фокс ее правильно учитывает с 5-й версии (может и в 3-й, с ней не работал), а вот в FPD 2.x в 29й байт фоксом писался ноль. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 18:49 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Dima Tфокс ее правильно учитывает с 5-й версии (может и в 3-й, с ней не работал), а вот в FPD 2.x в 29й байт фоксом писался ноль. Если точнее, то 29 байт игнорировался до версии FoxPro for DOS 2.0 включительно. В версии 2.5 и 2.6 он уже заполнялся. Работа в Windows (даже в Win 3.11) без заполненного 29 байта может приводить к проблемам. Поэтому FPW 2.6 обязательно его заполнял. Однако к описанной в теме проблеме это не имеет никакого отношения, поскольку речь идет о кодовой странице 1251. Т.е. это никак не может быть таблица от FoxPro for DOS. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 19:09 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
ВладимирМВ версии 2.5 и 2.6 он уже заполнялся. Негде проверить. На W7x64 не запускается FPD. но если мне склероз не изменяет FPD 2.6 пишет 0 в кодовую страницу. Был один проект где одновременно было FPD 2.6 и VFP6, там эта проблема была, после PACK приходилось дополнительно устанавливать 29й байт. Может речь о FPW 2.6 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 20:48 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Dima TFPD 2.6 пишет 0 в кодовую страницуЕсли он неправильно настроен. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 21:11 |
|
Как заставить OLEDB провайдера чтобы он нормально читал кодировку 1251?
|
|||
---|---|---|---|
#18+
Ещё есть в Help VFP S2 статья SET ENGINEBEHAVIOR. "When you set SET ENGINEBEHAVIOR to 70 or 80 and the code page of the table (CPDBF( )) differs from the current Visual FoxPro code page setting (CPCURRENT( )), SQL or other Rushmore optimizable commands could return or act upon incorrect records. When you set SET ENGINEBEHAVIOR to 90, Visual FoxPro builds temporary indexes to ensure correct results." А CPCURRENT() в VFPOLEDB вроде бы будет 1251, в региональный настройках задан "русский" по умолчанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2013, 07:31 |
|
|
start [/forum/topic.php?fid=41&tid=1583135]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 169ms |
0 / 0 |