Попутал кодировки давным-давно...
Модератор: kdv
Попутал кодировки давным-давно...
Всем привет. Помогите, плиз, советом.
Давным-давно, начиная проект, создал базу в кодировке 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?
Давным-давно, начиная проект, создал базу в кодировке 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?
Re: Попутал кодировки давным-давно...
база какого размера? потому что до опр. размера оптимальный вариант - экспортировать все в скрипт, там поправить на 1251 (кодировку базы, в остальных местах убрать указание кодировки), и создать базу из скрипта.
То есть, кракозябры как раз означают ПРАВИЛЬНОЕ отображение символов в соответствии с кодировкой 1250.
скорее всего 1250 отображается в 1251 как может (на компе с 1251), т.е. бинарно, а при utf8 - русских букв в 1250 нет, так что кракозябры показываются корректно - оно так и должно выглядеть.Если ставлю lc_ctype=UTF8 на своей машине, получаю те же закорюки, что и у остальных.
потому что на тех машинах, скорее всего, в реестре не ковырялась установка эквивалентности 1250 кодировке 1251 (где-то в NLS). Так что символы 1250 тут тоже показываются корректно.На других машинах (Win XP SP2) текст, выбираемый из таблиц идет Ęî÷óëîâŕ Ňčňîâŕ Ěŕđč˙ Âëŕäčěčđîâíŕ в таком виде.
То есть, кракозябры как раз означают ПРАВИЛЬНОЕ отображение символов в соответствии с кодировкой 1250.
Re: Попутал кодировки давным-давно...
База уже разрослась порядочно... Меня больше смущает то, что при создании в 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.
Действительно, полез в 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.
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Re: Попутал кодировки давным-давно...
"База разрослась порядочно" это сколько гигабайт? Исправить кодировку в ней всё же будет быстрее и надёжнее чем хакать кодовые страницы Windows.
Re: Попутал кодировки давным-давно...
я думал я понятно объяснил, в чем проблема.на всех машинах править этот параметр, но это по-варварски как-то.
никак. Вы правда не понимаете разницу между 1250 и 1251? В 1250 НЕТ русских символов, абсолютно.Вопрос назрел, как промежуточно указать системе, что данные из базы надо отображать не в 1250, а в 1251.
Re: Попутал кодировки давным-давно...
Спасибо за помощь и критику, судя по тому, что все здесь присутствующие считают размеры баз в гигабайтах, склоняю голову и стою понуро. Буду экспортировать в скрипты базу.