Как настроить правильный кирллический вывод через IDHTTP?
Дело в чем:
Использую IdHTTP для отдачи значений на сервер (XE8). При сохранении в бд вместо кириллических символов сохраняются знаки вопроса.
1. Использование AnsiToUtf8 (и подобных) не приводит вообще ни к чему.
2. Использование URLEncode (различных вариаций) приводит строку к виду "%0F%0E%0B%0D%00%0F" но сохраняет в БД всяческую чушь
2.5 Использование стандартного TIdURI.URLEncode приводит строку к виду "%0F%0E%0B%0D%00%0F", и пишет её же в БД.
3. Использование UTF8String невозможно при построении Android версии приложения, но тоже ни к чему не приводит, остаются знаки вопроса.
4. Использование WriteString при подготовке запроса (вместе с Post) меняет итоговое значение в бд, но русских букв так и не появляется (вариант aoaeoaae). Что примечательно, вывод данных c помощью WriteString прекрасно работает.
5. При использовании StringStream и StringList аналогичный результат, что и у WriteString.
Сервер мой, поэтому возможен вариант с изменением кодировки на сервере. На данный момент кодировка на сервере UTF-8, на промежуточном файле - UTF-8 без BOM.
Что делать? Как доставить кириллицу в БД наиболее простым способом?
P.S. Вопрос решен: Работает версия с TIdURI.URLEncode и rawurldecode() на сервере с PHP.
То есть у вас проблема именно в коннекте базы данных о которой ни слова. Доставить кирилицу наиболее простым образом - это настроить правильное соединение с базой данных. В резутьтате на все символьные поля у вас должны создаваться потомки TWideStringField или его аналог. Проверяйне настройки соединения с базой. Если база Interbase/Firebird, то достаточнов параметре соединения указать UTF8.
Если же у вас все таки и база с кодировкой ANSII и соединени с ней, то в методах текстового поля в событиях Get/PutRecord нужно использовать обработку методами utf8encode/utf8decode.
1. AnsiToUtf8 Из дэлфи уходит строка вида "Строка", в БД приходит "??????"
2. Из дэлфи уходит "%0F%0E%0B%0D%00%0F" приходит: 3qa.ru/434
3. UTF8String Из дэлфи уходит строка вида "Строка", в БД приходит "??????"
4. WriteString Уходит "строка", приходит "aoaeoaae" подобный текст
5. StringStream аналогично WriteString.
Судя по тому, что никаких проблем в PHP при ручном взаимодействии на параметры не происходило, от тут вообще не замешан, и виноват только сам дэлфи. Поэтому замеров "посередине", (на шаге с PHP) я не производил.
В принципе, если у вас есть какой-либо альтернативный, но работающий готовый вариант, я готов его попробовать. А то третий день, а я всё там же =)
Использование AnsiToUtf8 (и подобных) не приводит вообще ни к чему.
Может быть вы покажите нам хоть строчку кода, как вы это делаете? Создаётся впечатление, что вы неправильно работаете со строками. Плюс, мне абсолютно не понятно, как конвертирование текста в utf8 и его передача по сети может привести "ни к чему".
Использование URLEncode (различных вариаций) приводит строку к виду
Это вообще предназначено для кодирования URL, а не данных.