ozonar
@ozonar
PHP, JS, webRTC

Как настроить правильный кирллический вывод через 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.
  • Вопрос задан
  • 555 просмотров
Решения вопроса 1
ozonar
@ozonar Автор вопроса
PHP, JS, webRTC
TIdURI.URLEncode и rawurldecode() на сервере с PHP.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
svd71
@svd71
То есть у вас проблема именно в коннекте базы данных о которой ни слова. Доставить кирилицу наиболее простым образом - это настроить правильное соединение с базой данных. В резутьтате на все символьные поля у вас должны создаваться потомки TWideStringField или его аналог. Проверяйне настройки соединения с базой. Если база Interbase/Firebird, то достаточнов параметре соединения указать UTF8.

Если же у вас все таки и база с кодировкой ANSII и соединени с ней, то в методах текстового поля в событиях Get/PutRecord нужно использовать обработку методами utf8encode/utf8decode.
Ответ написан
@zedxxx
Использование AnsiToUtf8 (и подобных) не приводит вообще ни к чему.

Может быть вы покажите нам хоть строчку кода, как вы это делаете? Создаётся впечатление, что вы неправильно работаете со строками. Плюс, мне абсолютно не понятно, как конвертирование текста в utf8 и его передача по сети может привести "ни к чему".

Использование URLEncode (различных вариаций) приводит строку к виду

Это вообще предназначено для кодирования URL, а не данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы