Разный UNICODE в Delphi и Lazarus?!

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

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

Ответить
MaratIsk
постоялец
Сообщения: 126
Зарегистрирован: 20.08.2009 18:15:20

Разный UNICODE в Delphi и Lazarus?!

Сообщение MaratIsk »

Почему-то Delphi и Lazrus формируют несовместимые стримы при одинаковом коде
У вас нет необходимых прав для просмотра вложений в этом сообщении.
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

почему-то...

Причем здесь юникод и где он? В дельфи в частности.
Вы определяете shortString (string[250]) в записи вашего поля, вы ожидаете что в этой строке будет в дельфах уникод? Байтовая кодировка cp1251 там будет*, из-за скрытого преобразования кодовых страниц. В лазарусе в такой же переменной получится UTF-8, если механизм преобразования кодовых страниц неактивен (fpc 2.6.x)

Теорию то почитайте, не зря переводилось:

http://wiki.freepascal.org/LCL_Unicode_Support/ru
http://wiki.freepascal.org/FPC_Unicode_support/ru

и ту же тематику про delphi

*хотя, могу допустить, что в версиях дельфа, у которых String=UnicodeString и AnsiString=UnicodeString, а также char=UnicodeChar в вашей строке действительно будет 250 двубайтных знаков UTF-16 - но и тем более в этом случае не стоит ждать совместимости.
MaratIsk
постоялец
Сообщения: 126
Зарегистрирован: 20.08.2009 18:15:20

Сообщение MaratIsk »

извиняюсь - не уточнил - Delphi 2010
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

MaratIsk писал(а):извиняюсь - не уточнил - Delphi 2010
В Delphi 2010 символы UTF-16, в лазаре - UTF-8. Так что всё верно, несовместимость. Для совместимости нужна перекодировка.
CynicRus
постоялец
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Сообщение CynicRus »

Плюс если передавать из Delphi в Лазарь передавать и наоборот, следует учитывать, что менеджеры памяти различаются, и следует передавать PChar, а не строки. Хотя с AnsiString прокатывало и так. Не знаю почему.
Ответить