-
Вроде нашел ошибку в коде АРС, не уверен правда, что ошибка. См. мои комментарии:
SetLength(WS, Length(S));
if MultiByteToWideChar(cp_utf8, 0, PChar(S), -1, PWideChar(WS), Length(WS) + 1) = 0 then begin
Result := S;
Exit;
end;
SetLength(Result, Length(WS));
if WideCharToMultiByte(cp_1251, 0, PWideChar(WS), Length(WS) + 1, PChar(Result), Length(WS) + 1, nil, nil) = 0 then begin
Result := S;
Exit;
end;
-
> guav (12.11.2006 22:34:00) [0]
Так ты до конца смотри, последнея строка Result := PChar(Result); Результат точная строка, до первого нулевого символа.
Я конечно мог бы сделать с получением длины необходимой строки, но это двойной вызов функции и в конце то же самое Result := S
Зачем? Результат одинаковый.
Не вижу проблемы. Мусор учтен, он убирается последней строкой, для UTF-8 этот метод подходит, поскольку результат всегда меньше по длине. Строка может содержать любой мусор в конце, важна только левая часть до первого ограничителя, что и убирается через функцию PChar Параметр -1 обеспечивает этот самый ноль.
Давай свои доводы.
-
> guav (12.11.2006 22:34:00) [0]
Там где Result := S; Exit; - там присваивается входное значение в случае внутренней ошибки в работе функции MultiByteToWideChar и WideCharToMultiByte
-
> guav (12.11.2006 22:34:00) [0]
Я так понимаю, что ты уже скачал код и анализируешь? Как общее впечателение?
-
> [1] Anatoly Podgoretsky © (12.11.06 23:08)
Не заметил слона :-( ветку можно удалять. а можно и не удалять.
более лучшим было бы решение не с урезанием Result а с урезанием WS (таким же образом, или по результату MultiByteToWideChar)
PS: Я успешно поставил компонент. однако, сам проект окрывается сложнее [D7, Ics6]
-
> guav (12.11.2006 23:38:04) [4]
Да зачем удалять, если потребуется, то сюда же и можно писать.
-
> guav (12.11.2006 23:38:04) [4]
Рано послал ответ, я специально отказался от выделения точного места, функция это позволяет, в других проектах у меня это используется, просто здесь более эффективен этот метод, не надо считать, само присвоит ровно столько сколько нужно.
Насчет установки - я предупреждал, три компонента, правда один все равно полезен - это TNT, а вот два остальных возможно никогда не будут использоваться, хотя если надо будет сделать что то на сторону с полностью встроеный БД, то и абсолют пригодится, а вот судьба ICS более печально, правильнее пользоваться, тем что идет с Дельфи, просто мне Инди не подошло, только потратил неделю, но плохой опыт - тоже опыт.
-
> [3] Anatoly Podgoretsky © (12.11.06 23:23) > Как общее впечателение?
Трудно пока сказать, мне сложно в это сразу вникнуть, особенно когда среда отвергает проект (пытаюсь открывать в Д7). Могу разве что попридираться к ReadSettings/SaveSettings или к MultiByteToWideChar :-)
-
> guav (12.11.2006 23:38:04) [4]
Упс, я писал, что нужен ICS5, я не знаю как себя это будет вести на бете версии 6.
-
> [6] Anatoly Podgoretsky © (12.11.06 23:54) > я специально отказался от выделения точного места, функция > это позволяет, в других проектах у меня это используется, > просто здесь более эффективен этот метод, не надо считать, > само присвоит ровно столько сколько нужно.
не понял.
-
> [8] Anatoly Podgoretsky © (12.11.06 23:56)
поведение не важно, мне лишь бы открыть в среде. Модули переименовал и всё ок вроде. Но наверно таки установлю ICS5
-
> guav (12.11.2006 23:55:07) [7]
Ну к этому можно придраться, хотя это самые не существенные куски, можно по разному реализовывать, тем более что я к одному замечанию, по поводу ReadSettings прислушался, сделал по другому, хотя и старый вариант тоже нормальный был.
-
> guav (12.11.2006 23:57:09) [9]
У функции можно спросить, сколько байт требуется для результата, затем выделить это место и снова вызвать уже для исполнения.
-
> guav (12.11.2006 23:59:10) [10]
И учти, что я делал на Д2006 может и тут что-то вылезет.
-
> [12] Anatoly Podgoretsky © (13.11.06 00:10)
Понял. Долгий, но зато надёжный способ.
Про ReadSettings/SaveSettings: Ну не нравится мне когда вышел с максимизированным окном, после чего окно не уменьшается при восстанавливании wsNormal. да и повторение кода в каждой форме уже может быть поводом для придирки :-)
> [13] Anatoly Podgoretsky © (13.11.06 00:10) > И учти, что я делал на Д2006 может и тут что-то вылезет.
Кроме лишних свойств в ДФМ и кодировки модулей в УТФ-7 - ничего, вроде.
-
> guav (13.11.2006 0:18:14) [14]
UTF это не дань моде, а насущная необходимость, при том это делаю не я, а среда. В отличии от предудущих версий в 2006 это сделано хорошо, а предыдущие версии мне крови попортили.
-
> [15] Anatoly Podgoretsky © (13.11.06 00:23)
Я не возражаю против UTF-8. D7 возражает.
-
>[16] guav(c) 13-Nov-2006, 00:24 >Я не возражаю против UTF-8. D7 возражает. нотепадом её убивать.
-
> guav (13.11.2006 0:24:16) [16]
Знаю, но это не первый раз, не считая свойств. Издержки. Ну не хочет Борланд сделать раз и навсегда Юникод, а на дворе уже 2006 год. Сообственно уже в Д6 были зачатки, тексты кодировались с некотором текстовом подобии Юникод и вот тут то и возникала подлянка при переносе на машину с другой локализацией, хотели сделать хорошо, а получилось как всегда и трудно было программировать тексты более чем на одном языке, хоть в 2006 сделали что-то более приличное, но до нормального еще далеко.
-
> Ketmar (13.11.2006 0:30:17) [17]
Убить то можно, не будет ли других проблем?
|