Разный UNICODE в Delphi и Lazarus?!
Модератор: Модераторы
Разный UNICODE в Delphi и Lazarus?!
Почему-то Delphi и Lazrus формируют несовместимые стримы при одинаковом коде
У вас нет необходимых прав для просмотра вложений в этом сообщении.
почему-то...
Причем здесь юникод и где он? В дельфи в частности.
Вы определяете 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 - но и тем более в этом случае не стоит ждать совместимости.
Причем здесь юникод и где он? В дельфи в частности.
Вы определяете 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 - но и тем более в этом случае не стоит ждать совместимости.
извиняюсь - не уточнил - Delphi 2010
- Снег Север
- долгожитель
- Сообщения: 3071
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
В Delphi 2010 символы UTF-16, в лазаре - UTF-8. Так что всё верно, несовместимость. Для совместимости нужна перекодировка.MaratIsk писал(а):извиняюсь - не уточнил - Delphi 2010
Плюс если передавать из Delphi в Лазарь передавать и наоборот, следует учитывать, что менеджеры памяти различаются, и следует передавать PChar, а не строки. Хотя с AnsiString прокатывало и так. Не знаю почему.
