Ничего не понимаю с кодировками!!!

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Ничего не понимаю с кодировками!!!

Сообщение Mr.Smart » 03.11.2009 15:59:54

Лимит строки в DB сделай такой UTF8Length(str)+1
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Ничего не понимаю с кодировками!!!

Сообщение qivi » 03.11.2009 16:26:19

Дело не в нехватки поля базы!!!! Поле базы 512, тогда как в неё пишется строка из 128 русских символов которая уж 100% короче заложенных 512. Проблема в чём то другом.

Для ввода строки использую обычный Edit, в нём выставляю параметр MaxLength:=128, это может как то сказаться?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Ничего не понимаю с кодировками!!!

Сообщение VirtUX » 03.11.2009 16:39:13

Дело в том, что русские символы могут занимать 2 или 4 байта. Если, скажем, выделено поле на 40 байт, то это не значит, что влезет максимум 10 символов, а может от 10 до 20. Теперь представим ситуацию, что набрано 15 символов и ими занято 38 байт. 16-й символ 4-х байтный. Следовательно в showmessage корректно отобразятся 16 символов, а поле в таблице примет от 16-ого символа только первые 2-байта вместо 4-х. Вот Вам и кракозябра вместо нормального символа.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Ничего не понимаю с кодировками!!!

Сообщение Mr.Smart » 03.11.2009 16:44:03

VirtUX
Русские (Кириллица) символы занимают именно 2 байта! Диапазон в Unicode с 0x04001 по 0x04E9. Соответственно в UTF-8 будут иметь вид %110xxxxx %10xxxxxx
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Ничего не понимаю с кодировками!!!

Сообщение qivi » 03.11.2009 17:20:59

Ребята... стойте... я вижу между нами повисло непонимани.

В 2 последних постах изложена информация которую я освоил и в которой разобрался... ещё раз попробую объяснить проблему:

Программа во время своей работы вносит в таблицу строковые данные, длина которых ограничена ПРОГРАММНО а не полями таблиц, поля же таблиц заданы согласно расчёта 4 байта на символ (максимум программно лимита * 4), таким образом ситуация "буквы не влезли" исключена категорически, пространство касательно русских символов избыточно!!!!

Таким образом я прошу помочь с ситуцией изложенной на моём посте со скрином И ЭТО ТОЧНО НЕ НЕХВАТКА МЕСТА В ПОЛЕ БАЗЫ!!!!
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Ничего не понимаю с кодировками!!!

Сообщение Mr.Smart » 03.11.2009 17:28:28

Посмотри реальный размер строки Length(str) и сравни его с размером поля данных - узнаешь нехватка места или нет :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Ничего не понимаю с кодировками!!!

Сообщение qivi » 03.11.2009 18:02:34

Ну я ведь специально расписал что вводимые строки ограничиваются ПРОГРАММОЙ, программа не допускает запись более 128 символов в поле показанное на скреншоте, тогда как заложено 512 байт!!!!

Код: Выделить всё
showmessage(inttostr(Length(srs.E1.Text)));


результат ровно 256!!!! Крякозябрик наместе!
Последний раз редактировалось qivi 03.11.2009 19:37:09, всего редактировалось 1 раз.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Ничего не понимаю с кодировками!!!

Сообщение Attid » 03.11.2009 18:43:11

qivi писал(а):программа не допускает запись более 128

как проверяешь длину ?

Добавлено спустя 1 минуту 12 секунд:
посмотри какой байт в этом кракозяке и в какой момент он там появляется
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Ничего не понимаю с кодировками!!!

Сообщение qivi » 03.11.2009 19:34:37

Для ввода этих самых строковых данных я использую обычный Edit, а ему задаю параетр:
Код: Выделить всё
srs.E1.MaxLength:=128;

Таким образом вводимые строки ограничиваются 128 символами.

посмотри какой байт в этом кракозяке и в какой момент он там появляется

Появляется он там после:
Код: Выделить всё
FieldByName('nazvanie').AsString:=srs.E1.Text;

:D

А вот как посмотреть что это за байт я не придумал... но когда я два раза щёлкаю на строку в дбгриде и он её выделяет (на редактирование), этот символ в конце исчезает (неотображается), а когда я снимаю выделение со строки ничего не меняя он опять там.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Ничего не понимаю с кодировками!!!

Сообщение ViTality » 04.11.2009 01:55:45

qivi писал(а):Как поправить то косяк?
1111.png

конкретно в данном случае задавать максимальное четное количество
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: Ничего не понимаю с кодировками!!!

Сообщение qivi » 04.11.2009 03:03:50

конкретно в данном случае задавать максимальное четное количество


В смысле чётное количество символов? Дак и так заданный лимит 128 символов...

Добавлено спустя 13 часов 43 минуты 26 секунд:
ЭВРИКА!!!! Понял что это за крякозябрик!!!!
результат ровно 256!!!! Крякозябрик наместе!


А поле TDBF типа String вмещает только 255 байт!!!!

Отсюдова новая и куда более серьёзна проблема... как быть с полем 1200 символов (4800 байт)? Какой тип полей TDBF поддерживает большие строки?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Ничего не понимаю с кодировками!!!

Сообщение GAMER » 04.11.2009 17:04:00

Memo?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Ничего не понимаю с кодировками!!!

Сообщение Vadim » 04.11.2009 17:11:22

qivi писал(а):А поле TDBF типа String вмещает только 255 байт!!!!

254. ;)
Для мемо-полей теоретически ограничения нет. На практике же надо проверять.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Ничего не понимаю с кодировками!!!

Сообщение qivi » 04.11.2009 18:05:19

Меммо относится к данным не фиксированной длины, под него формируется отдельный файл, что честно говоря не желательно , а типа длинных определённой длины для строковых переменных большого размера в TDBF нету?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Ничего не понимаю с кодировками!!!

Сообщение Vadim » 04.11.2009 18:08:29

qivi писал(а):а типа длинных определённой длины для строковых переменных большого размера в TDBF нету?

TDBF тут совершенно не при чём. Проблема в самом формате файла. TDBF лишь ориентируется на существующий формат, от себя она ничего не добавляет.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru