Memo1.Text: = AnNote.FieldByName ('ANBLOB'). Значение
Я вижу китайские символы в Delphi 10.2 и латинские символы в Delphi XE2.
Свойство TField.Value
возвращает Variant
.
В 10.2 это Variant
, вероятно, содержит только необработанные данные большого двоичного объекта.При преобразовании такого Variant
в String
вся информация о кодировке теряется.Вы получаете «китайские иероглифы» (обычно известные как «Mojibake»), когда необработанные байты ANSI неверно интерпретируются как байты UTF-16.
В XE2 это Variant
, вероятно, содержит предварительно декодированный string
вместо необработанных байтов больших двоичных объектов.
Вы хотите, чтобы драйвер базы данных декодировал для вас строки, используя кодировку из метаданных поля базы данных.Таким образом, вы можете столкнуться с ошибкой в драйвере базы данных в 10.2, которая не существовала в XE2.
Memo1.Lines.Text: = AnNote.FieldByName ('ANBLOB'). AsString
Я вижу символ латинского алфавита в Delphi 10.2, почему это так?
TField.AsString
позволяет драйверу базы данных декодировать данные поля с использованием метаданных набора символов поля по мере необходимости.