Попутал кодировки давным-давно...

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
romantc
Сообщения: 3
Зарегистрирован: 12 янв 2011, 16:50

Попутал кодировки давным-давно...

Сообщение romantc » 12 янв 2011, 17:09

Всем привет. Помогите, плиз, советом.
Давным-давно, начиная проект, создал базу в кодировке WIN1250, по собственной глупости, неумению и невнимательности. Все время работал на FB1.5, писал в Delphi 2005 и горя не знал. Приложение всегда нормально работало с кодировками.

Намедни решил перейти на Delphi 2010, все коды поправил, прогу скомпилил. На моем компе (Win XP SP3) все отлично. На сервере (Win Serv 2003) тоже. На других машинах (Win XP SP2) текст, выбираемый из таблиц идет Ęî÷óëîâŕ Ňčňîâŕ Ěŕđč˙ Âëŕäčěčđîâíŕ в таком виде. В параметрах подключения TDatabase стоит lc_ctype=WIN1250. Если ставлю lc_ctype=UTF8 на своей машине, получаю те же закорюки, что и у остальных.

Как думаете, что можно предпринять? Уж больно хочется в 2010х дэлфях писать.

Может как-то базу перегнать в кодировку WIN1251?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Попутал кодировки давным-давно...

Сообщение kdv » 13 янв 2011, 00:08

база какого размера? потому что до опр. размера оптимальный вариант - экспортировать все в скрипт, там поправить на 1251 (кодировку базы, в остальных местах убрать указание кодировки), и создать базу из скрипта.
Если ставлю lc_ctype=UTF8 на своей машине, получаю те же закорюки, что и у остальных.
скорее всего 1250 отображается в 1251 как может (на компе с 1251), т.е. бинарно, а при utf8 - русских букв в 1250 нет, так что кракозябры показываются корректно - оно так и должно выглядеть.
На других машинах (Win XP SP2) текст, выбираемый из таблиц идет Ęî÷óëîâŕ Ňčňîâŕ Ěŕđč˙ Âëŕäčěčđîâíŕ в таком виде.
потому что на тех машинах, скорее всего, в реестре не ковырялась установка эквивалентности 1250 кодировке 1251 (где-то в NLS). Так что символы 1250 тут тоже показываются корректно.

То есть, кракозябры как раз означают ПРАВИЛЬНОЕ отображение символов в соответствии с кодировкой 1250.

romantc
Сообщения: 3
Зарегистрирован: 12 янв 2011, 16:50

Re: Попутал кодировки давным-давно...

Сообщение romantc » 13 янв 2011, 08:04

База уже разрослась порядочно... Меня больше смущает то, что при создании в Delphi2005 на всех машинах все работало отлично. За 3 года никаких проблем не возникло, хотя база постоянно разрасталась и сам проект модифицировался. Наверное, сыграла разница IBX 9,09 и IBX 12,12.

Действительно, полез в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage и обнаружил, что у меня параметр 1250=c_1251.nls, а на другом компе 1250=c_1250.nls. Буду копать в этом направлении. Спасибо за наводку )))
...
Изменив параметр 1250=c_1251.nls на 1250=c_1250.nls у себя на компе, после перезагрузки получаю в проге те же кракозябры! Можно как вариант на всех машинах править этот параметр, но это по-варварски как-то.

Вопрос назрел, как промежуточно указать системе, что данные из базы надо отображать не в 1250, а в 1251.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Попутал кодировки давным-давно...

Сообщение Dimitry Sibiryakov » 13 янв 2011, 14:33

"База разрослась порядочно" это сколько гигабайт? Исправить кодировку в ней всё же будет быстрее и надёжнее чем хакать кодовые страницы Windows.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Попутал кодировки давным-давно...

Сообщение kdv » 14 янв 2011, 10:24

на всех машинах править этот параметр, но это по-варварски как-то.
я думал я понятно объяснил, в чем проблема.
Вопрос назрел, как промежуточно указать системе, что данные из базы надо отображать не в 1250, а в 1251.
никак. Вы правда не понимаете разницу между 1250 и 1251? В 1250 НЕТ русских символов, абсолютно.

romantc
Сообщения: 3
Зарегистрирован: 12 янв 2011, 16:50

Re: Попутал кодировки давным-давно...

Сообщение romantc » 14 янв 2011, 15:31

Спасибо за помощь и критику, судя по тому, что все здесь присутствующие считают размеры баз в гигабайтах, склоняю голову и стою понуро. Буду экспортировать в скрипты базу.

Ответить