編集質問へのコメント、特にDelphi7へのヒントのために私の答えを改訂します。
Richeditは、MSから提供され、Windowsにパッケージ化されているrichedit.dllに基づいています。Windows MEの後は、UNICODEが有効になっています。したがって、ファイルの最初の2文字をBOFとして解釈する文字セットを取得します。文字が誤って解釈され、ASCIIまたはANSIファイルでBOFと見なされる場合があります(互換性の理由から、BOFは機能しません)。これはwrite.exeでも確認できます。
ファイルをメモ帳に保存するときは、正しいエンコーディングを使用していることを確認してください。ファイルにエンコーディングがない場合(バイナリビューアで最初の2バイトを確認)、可能であれば、前面に2つのスペースを追加して、問題が解決するかどうかを確認します。
Delphi2009および2010
Delphi 2009以降にアップグレードするときに人々を助けるために、最初の答えを残しておきます。
実際には、テキストファイルにはエンコーディングはありませんが、純粋なASCIIまたはANSIであり、Unicodeが有効になっているDelphi2009または2010を使用しています。最初の2文字はBOF(どのUNICODEエンコーディングが使用されているかをプログラムに通知します)と見なされます。これがたまたま正しいBOFである場合、間違ったエンコーディングが適用される可能性があります。
TMemoryStreamは、エンコーディングの強制を許可しません。
可能であれば、LoadFromFileメソッドに新しいTEncodingパラメーターを持つTStringsを使用できます。これは次のようになります
RichEdit1.Lines.LoadFromFile('c:\test.txt', TEncoding.ASCII);
このページもご覧ください:http://edn.embarcadero.com/article/38693