В заметке в xe2 неправильно отображается символ умлаута, хранящийся в наборе ANSI

У нас в Delphi 2007 есть приложение, которое записывает содержимое memo в текстовый файл и загружает его обратно. Для TMemo charset задано значение AnisCharSet и "Включить темы времени выполнения" в параметрах проекта -> приложение выключено. Загружаемый контент - что-то вроде этого "möglich", который содержит символы умляута. Это приложение прекрасно работает в Delphi 2007, который записывает в текстовый файл, читает его и правильно показывает содержимое. Во время записи в файл memo конвертирует строку umlaut в "m с chten" и, когда memo загружает ее обратно, корректно отображает ее.

Теперь мы обновили то же приложение до delphi xe2, и здесь, когда памятка загружает текст из файла, он не отображает его должным образом, т.е. вместо отображения строки umlaut как "möglich", она отображает "möchten", преобразование которого было Похоже, что в Delphi Xe2 не происходит происходящего в delphi xe2.

Кто-нибудь может подсказать, что можно сделать, чтобы правильно отображать символы умлаута в приложении delphi xe2. Это просто опции savetofile и loadfromfile в memo, которые используются без какой-либо кодировки. В Xe2 включение тем во время выполнения отключено, а кодировка шрифтов memo по-прежнему Ansi.

Проблема здесь заключается в загрузке и отображении символов из текстового файла в приложении delphi xe2, которое было сохранено с помощью приложения delphi 2007

1 ответ

Решение

Umlauts чувствительны к кодовым страницам в средах Ansi, таких как D2007, и поэтому требуют дополнительной обработки в средах Unicode, таких как XE2. Поэтому лучше всего читать / записывать ваши данные, используя нейтральный формат кодировки, например UTF-8. Особенно, если данные должны перемещаться с одного компьютера на другой, где кодовая страница Ansi по умолчанию ОС может отличаться.

В этой конкретной ситуации вам, возможно, придется выяснить, какая конкретная кодовая страница использовалась ОС, когда код D2007 сохранил данные (поскольку она использовала бы кодовую страницу Ansi по умолчанию в ОС), а затем явно указать коду XE2, чтобы использовать эту та же кодовая страница при чтении данных. В XE2 TStrings.LoadFrom...() методы имеют необязательный TEncoding Параметр Вы можете использовать TEncoding.GetEncoding() способ получить TEncoding объект для конкретной кодовой страницы.

Другие вопросы по тегам