Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
05.10.2015, 13:08
|
|||
---|---|---|---|
Можно ли подсчитать размер строки в байтах? |
|||
#18+
Предыстория В Ensemble 2015 столкнулся с ошибкой SUBSCRIPT в EnsLib.SQL.Common Система пытается кэшировать sql запросы, причём ключом массива является сам запрос. Программисты пытаются обрезать строку до 230 символов, но если в строке появляется хотя бы один wide char (читай - кириллица), то вся строка становится wide char, значит длина строки = [кол. символов] * 2 Код: c# 1. 2. 3. 4. 5. 6.
Я заменил последнюю букву на кириллицу и вся строка увеличилась в размере в два раза. Таким образом, если в SQL запросе есть кириллица и размер превышает 251 байт, то получаем SUBSCRIPT в недрах ансамбля. Вопрос Как посчитать размер строки в байтах? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2015, 13:53
|
|||
---|---|---|---|
Можно ли подсчитать размер строки в байтах? |
|||
#18+
На самом деле по идее я думаю это не совсем верно, по поводу того что длина сразу становится двойной zzdump выводит просто, если есть widechar в строке то будет выравнивание всех будет до двух байтZZDUMP(x) public { Ztrap:'$D(x) $$$APPERROR($$$ERSYNTX) Set $ZT="zzderr" #; c is number of characters per line #; d is number of hexadecimal digits per character code If $ZISWIDE(x) { Set c=8,d=4 } Else { Set c=16,d=2 } For i=0:c:$Length(x)-1 { Set s=$Extract(x,i+1,i+c),n=$Length(s) Write !,$TR($J($ZHEX(i),4)," ","0")_": " For j=1:1:n { Write $TR($J($ZHEX($A(s,j)),d)," ","0")_" " Set:$E(s,j)?1C $E(s,j)="." } Write ?62,s } Quit zzderr Set $ZT="" Ztrap $$$APPERROR($$$LASTERROR) }вот пример кода и результат s test="testтест" zzdump test w ! f i=1:1:$l(test) zzdump $e(test,i) w ! w !,"length = ",$l($zcvt(test,"O","UTF8")) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2015, 13:57
|
|||
---|---|---|---|
Можно ли подсчитать размер строки в байтах? |
|||
#18+
а с другой стороны. ощущение что вы неправильно боретесь с проблемой? может подробнее опишите саму ошибку, что возникла, а так если ошибка внутри кода Cache, может стоит обратиться в WRC ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.10.2015, 14:09
|
|||
---|---|---|---|
Можно ли подсчитать размер строки в байтах? |
|||
#18+
u78Я заменил последнюю букву на кириллицу и вся строка увеличилась в размере в два раза.Неверный вывод:ДокументацияTherefore, on a Unicode implementation of Caché each character is counted as 2 bytes; a Unicode instance of Caché counts two bytes per character even when string contain no Unicode characters. Проверить легко: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
u78 Вопрос Как посчитать размер строки в байтах? BYTELEN (или $l($zcvt(строка,"O","UTF8"))) Но Вам это не поможет. Нужно смотреть в сторону максимальной длины ссылки на глобал: 6937128 , 17670875 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=39&mobile=1&tid=1556586]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 168ms |
0 / 0 |