Греческие символы не отображаются должным образом в теле письма с использованием компонентов Indy в Delphi 10.2 [duplicate]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

7
задан ulidtko 23 March 2012 в 20:17
поделиться

3 ответа

Сработало

порядок событий очень важен

Этот работает

LMsg.ContentType: = 'text / plain'; LMsg.CharSet: = 'UTF-8';

Это не

LMsg.CharSet: = 'UTF-8'; LMsg.ContentType: 'текст / обычный';

2
ответ дан ETL Man 25 August 2018 в 14:34
поделиться

В моем случае, если я добавляю вложение, я должен указывать только кодировку:

pMsg->CharSet = "UTF-8";

Еще один почтовый читатель показывает исходный код почты.

2
ответ дан Maypeur 25 August 2018 в 14:34
поделиться

Это по дизайну. Когда свойство ContentType задается, средство установки свойств может обновить свойство CharSet со значением по умолчанию, если вход явно не указывает кодировку. Определенные типы контента, особенно в области text/, имеют определенные настройки по умолчанию для набора символов, продиктованные в различных RFC. Indy пытается следовать этим правилам, насколько это возможно. Таким образом, вам нужно установить свойство CharSet на ваше предполагаемое значение после того, как вы установили свойство ContentType, как вы уже обнаружили:

//LMsg.CharSet := 'UTF-8';
LMsg.ContentType := 'text/plain';
LMsg.CharSet := 'UTF-8';

Вы также можете сделать это вместо:

LMsg.ContentType := 'text/plain; charset=UTF-8';
13
ответ дан Remy Lebeau 25 August 2018 в 14:34
поделиться
Другие вопросы по тегам:

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