Редактировать Пересмотр моего ответа из-за замечания по вопросу, особенно намек на Delphi 7.
Richedit основан на richedit.dll, который исходит от MS и упакован с Windows. После Windows ME он включен UNICODE. Таким образом, он получает набор символов, интерпретирующий первые 2 символа файла как BOF. Существуют экземпляры, в которых символы будут интерпретироваться и считаться BOF в файлах ASCII или ANSI (они не будут иметь BOF по соображениям совместимости). Это можно увидеть и в файле write.exe.
Убедитесь, что вы используете правильную кодировку при сохранении файла в блокноте. Если файл не имеет кодировки (посмотрите на первые два байта в двоичном средстве просмотра), попробуйте - если возможно - добавить два пробела в фронт и посмотреть, сохраняется ли проблема.
Delphi 2009 и 2010
Я оставлю мой первый ответ, чтобы помочь людям при обновлении до Delphi 2009 и выше:
Я бы на самом деле сказать, что текстовый файл не имеет кодировку, но является чистым ASCII или ANSI, и вы используете Delphi 2009 или 2010, который включен UNICODE. Первые два символа будут восприниматься как BOF (который сообщает программе, в которой используется кодировка UNICODE). Если это будет правильный BOF, возможно, будет применена неправильная кодировка.
TMemoryStream не позволяет применять кодирование.
Если возможно, вы можете использовать TStrings, который имеет новый параметр TEncoding в методе LoadFromFile. Это было бы как
RichEdit1.Lines.LoadFromFile('c:\test.txt', TEncoding.ASCII);
Посмотрите на этой странице, а также: http://edn.embarcadero.com/article/38693
Какую версию Delphi? Что такое кодировка текстового файла? –
Это новый созданный txt-файл через Windows. Delphi 7 – Tom
Если вы используете Блокнот, убедитесь, что он сохранил его как кодировку ASCII, а не UTF8 –