Вы столкнулись с тем, что я считаю "ошибкой" в методах TWriter.WriteString и TWriter.ReadString. Эти два метода внутренне используются Delphi для перемещения вашего TLabel.Caption из реального живого объекта во время разработки в файл DFM, а затем обратно в живой объект во время выполнения.
Если вы посмотрите на код для упомянутых двух подпрограмм, вы заметите (я полагаю, в шоке), что фактический материал, который входит в поток, конвертируется в Unicode с использованием кодовой страницы операционной системы по умолчанию! Это прекрасно и прекрасно, если кодовая страница, используемая на компьютере разработчика, точно совпадает с кодовой страницей, используемой на тестовой машине, и, вероятно, они не совпадают, и, скорее всего, вы получаете ошибку. Обратите внимание, что значение EASTEUROPEAN_CHARSET, которое вы устанавливаете для подписи в форме, не имеет абсолютно никакого значения, поскольку метод TWriter.WriteString не имеет представления об этом!
У меня есть отчет об ошибке по этому вопросу на КК, он был там много лет ... Они, вероятно, думают, что это "нарочно", но я не думаю, что это очень хороший дизайн.
Решение, которое я бы рекомендовал, - это быстрый переход на Delphi 2010. Я разработчик Delphi в Румынии, и у меня было много проблем с такими вещами, но теперь это все в прошлом, потому что Delphi 2010 - это UNICODE, поэтому мне больше не нужно беспокоиться о преобразованиях кодовых страниц.
Если вы не можете переключиться на Delphi 2010, возможно, вы захотите «взломать» файл Classes.pas и изменить процедуру TReader.ReadString, чтобы всегда выполнять преобразование с использованием ВАШЕЙ кодовой страницы, а не системы по умолчанию.