1

テキストファイルからricheditにテキストを読み込んでいますが、代わりに奇妙な中国語の記号が表示されます。何が間違っているのでしょうか。

ms := TMemoryStream.Create;
ms.LoadFromFile('C:\aw.txt');
ms.Seek(0, soFromEnd);
zChar:=#0;
ms.Write(zChar, 1);
ms.Seek(0, soFromBeginning);
RichEdit1.SetSelTextBuf(ms.Memory);
ms.free;
4

1 に答える 1

3

編集質問へのコメント、特に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

于 2009-09-23T13:34:24.727 に答える