Здравствуйте.
Есть проект на D7, в котором имеются Edit с заполненным русским текстом.
Начал переносить код на XE5(в дальнейшем под андроид написать есть желание приложение), но тк в версиях Delphi 9+ есть поддержка юникода, то возникла проблема.
Русский текст при записи из компонента в переменную, при перекодировании StrToHex, выдаёт совсем другие значения, не совпадающие со значениями в D7.
Utf8Decode/Encode пробовал, не помогло.
Есть способы решить данную проблему?)
Sinyss
15.04.2014, 19:23
в дальнейшем под андроид написать есть желание приложение
Хочешь писать под андроид - пиши на Java.
NebesaBag
15.04.2014, 20:11
Надеюсь тут появятся комментарии по теме)
Dinmaite
15.04.2014, 22:19
Много раз ведь говорили. Хотите ответ? Кидайте свой код.
Ибо не ясно какую конкретно функцию вы использовали.
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]', data);
Логин может быть на двух языках. Данный образец кода в 7 делфи работает без сбоев. В XE5 посылает совсем другие байты у логина(думаю из-за поддержки юникода).
Рэйзор
16.04.2014, 06:27
Раз у Вас стоит XE5 то можно воспользоваться последними исправлениями в инди и использовать TIdMultipartFormDataStream вместо TStringList
пример:
data := TIdMultipartFormDataStream.Create;
data.AddFormField('login', LabeledEdit1.Text, 'utf-8');
Если нужно убрать quoted-printable, то надо установить тип содержимого:
Раз у Вас стоит XE5 то можно воспользоваться последними исправлениями в инди и использовать TIdMultipartFormDataStream вместо TStringList
Подскажите как вывести подобное showmessage(String(StrToHex(data[0]))); ?
Чтобы я мог проверить что записано в данной ячейке.
Рэйзор
17.04.2014, 07:17
Подскажите как вывести подобное showmessage(String(StrToHex(data[0]))); ?
Чтобы я мог проверить что записано в данной ячейке.
это поток, из него так просто не вытащить уже.
Я давно на делфи не писал - так что не знаю, мб и можно.
И по поводу функции StrToHex - мб стоит использовать AnsiStrToHex : [Ссылки могут видеть только зарегистрированные и активированные пользователи]
NebesaBag
17.04.2014, 10:50
StrToHex я использую лишь для того чтобы без снифера сразу видеть правильность данных.
Увы, с TIdMultipartFormDataStream вместо "login=1&pass=2" шлётся много других не нужных параметров.
Возможно есть способ решения проблемы без этого компонента?
Рэйзор
17.04.2014, 11:18
StrToHex я использую лишь для того чтобы без снифера сразу видеть правильность данных.
Увы, с TIdMultipartFormDataStream вместо "login=1&pass=2" шлётся много других не нужных параметров.
Возможно есть способ решения проблемы без этого компонента?
Эти данные будут нормально обработаны любым веб сервером.
Есть вариант в виде моего старого компонента:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
компонент визуальный - после установки искать во вкладке Internet
примеры:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Использовать TStringList не стоит - так как там проблемы со склейкой.
Лучше просто строку передавать со склейкой через & как в одном из примеров:
s := [Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]', 'user=ololoev&pass=123456');
NebesaBag
17.04.2014, 12:16
Спасибо, только я боюсь что Ваш компонент также будет получать юникодные значения русских символов, что в итоге не приведёт к успешной авторизации(
Сейчас вопрос в том как можно без юникодных обработок получить русские символы, подобно Д7
Рэйзор
17.04.2014, 12:20
Спасибо, только я боюсь что Ваш компонент также будет получать юникодные значения русских символов, что в итоге не приведёт к успешной авторизации(
Сейчас вопрос в том как можно без юникодных обработок получить русские символы, подобно Д7
в том то и дело, что он специально для этого и был написан.
никаких обработок не нужно.
Там везде AnsiString используется.
+ возможность инициализации с нужным экземпляром класса TEncoding