Размер строки в байтах (вне зависимости от кодировки)

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

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

Re: Размер строки в байтах (вне зависимости от кодировки)

Сообщение zub » 31.10.2013 10:28:15

Вообще на тему неявных перекодировок непомишал бы четкий рецепт от команды fpc - мне такой непопадался - иногда приходится вникать когда содержимое испортилось. ну и лазарьщикам пора задуматься о том как быть после 2.8

>>директива выбора кодовой страницы должна быть включена в обязательном порядке.
и исходники сохранены в надлежащем формате. формат исходников неменее важен чем директива.
Кстати насколько я понимаю с БОМом в исходниках директива теряет смысл и только всё испортит переопределив правильную кодировку зачерпнутую из бома.

Интересно, настанет ли день когда в простых случаях можно будет незадумываться ниочем и без разницы на кодировки исходников, системы, консоли и прочих ЛЦЛей всё будет работать как надо? - ведь ради этого весь сыр-бор))
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Размер строки в байтах (вне зависимости от кодировки)

Сообщение SSerge » 31.10.2013 10:43:23

zub писал(а):Вообще на тему неявных перекодировок непомишал бы четкий рецепт от команды fpc - мне такой непопадался


Вообще-то описалово есть, не очень четкое, но... http://wiki.freepascal.org/FPC_Unicode_support
Кстати, там про поддержку utf8 они пишут:
UTF8String Not implemented Needs a real implementation. Is currently just an alias for ansistring.


вот как раз как будет "real implementation", так и внутренне содержание изменится.

zub писал(а):Кстати насколько я понимаю с БОМом в исходниках директива теряет смысл и только всё испортит переопределив правильную кодировку зачерпнутую из бома.


Попробовал. :) На практике, BOM игнорируется и используется кодовая страница, определенная в директиве.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Размер строки в байтах (вне зависимости от кодировки)

Сообщение zub » 31.10.2013 11:22:22

>>Вообще-то описалово есть, не очень четкое, но... http://wiki.freepascal.org/FPC_Unicode_support
Вот, очередь за лазарем, текущие их рекомендации недопускать маркированные строки внутрь лцл, юзать только CP_NONE c utf8 внутри - больше отмазка - отстали от FPC

>>вот как раз как будет "real implementation", так и внутренне содержание изменится.
Если появится реальная переменная длина символов для length() и sizeof([i]) - оный UTF8String автоматом перестанет быть ansistring`ом в привычном понимании и соответственно рассуждения из этого топика на него перестанут распространяться.

>>Попробовал. На практике, BOM игнорируется и используется кодовая страница, определенная в директиве.
Надо выбирать чтото одно, имхо BOM логичнее
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Размер строки в байтах (вне зависимости от кодировки)

Сообщение SSerge » 31.10.2013 13:43:57

zub писал(а):Надо выбирать чтото одно, имхо BOM логичнее


Я не выбор описываю :D а реальную реакцию компилятора. Для него директива получается главнее.

zub писал(а):рассуждения из этого топика на него перестанут распространяться.

...и программы, построенные на рассуждениях из этого топика, тоже перестанут работать...
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Размер строки в байтах (вне зависимости от кодировки)

Сообщение zub » 31.10.2013 15:39:54

>>...и программы, построенные на рассуждениях из этого топика, тоже перестанут работать...
Не думаю что такие вещи будут происходить молча без злобных варнингов... Да и вообще слабо в это верится скорее в какойнибудь встроенный utf8length и другие встроенные utf8четотам для этого типа.

И лежит эта табличка в Old/obsolete sections...
Код: Выделить всё
UTF8String=type AnsiString(CP_UTF8);

Я бы не сказал что это просто алиас... тачкчто - поживем увидим, во всяком случае других рассуждений пока нет))
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Размер строки в байтах (вне зависимости от кодировки)

Сообщение SeZuka » 31.10.2013 19:51:05

SSerge писал(а):У вас тестовый примерчик того... по самой сути некорректен

И чем ваш пример корректнее моего? Вы хоть поняли что в вашем выводе без директивы и бома длина строки UnicodeString получилась 40 байтов.
Еще раз повторюсь, ни директива, ни бом никак не влияют на работу функции Length в реалтайме.
SSerge писал(а):Однако, некто упорно утверждает, что length всегда отражает длину строки в байтах, что неверно.

Тут вроде никто такого не утверждал. А ТС хочет видеть длину любой строки в байтах.
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Пред.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru