delphi - 加载文本时的中文符号

标签 delphi delphi-7 richedit

我正在将文本从文本文件加载到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;

最佳答案

编辑根据问题的评论修改我的答案,特别是对Delphi 7的提示。

Richedit基于richedit.dll,它来自MS并与Windows一起打包。 Windows ME之后,启用了UNICODE。因此,它获得将文件的前 2 个字符解释为 BOF 的字符集。在某些情况下,字符会被错误解释并被视为 ASCII 或 ANSI 文件中的 BOF(出于兼容性原因,它们不会具有 BOF)。这也可以在 write.exe 中看到。

确保在记事本中保存文件时使用正确的编码。如果文件没有编码(在二进制查看器中查看前两个字节),请尝试(如果可能)在前面添加两个空格,看看问题是否仍然存在。

德尔福 2009 和 2010

我将留下我的第一个答案,以帮助人们升级到 Delphi 2009 及更高版本:

我实际上想说的是,文本文件没有编码,而是纯 ASCII 或 ANSI,并且您使用的是启用了 UNICODE 的 Delphi 2009 或 2010。前两个字符将被视为 BOF(它告诉程序使用哪种 UNICODE 编码)。如果这恰好是正确的 BOF,则可能会应用错误的编码。

TMemoryStream 不允许强制编码。

如果可能,您可以使用 TStrings,它在 LoadFromFile 方法中具有新的 TEncoding 参数。这就像

    RichEdit1.Lines.LoadFromFile('c:\test.txt', TEncoding.ASCII);

也看看这个页面:http://edn.embarcadero.com/article/38693

关于delphi - 加载文本时的中文符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1465931/

相关文章:

delphi - 如何在 Vista Aero 下以编程方式禁用窗口动画?

delphi - 如何跟踪仅在调试器下发生但未被调试器捕获的间歇性崩溃?

delphi - 如何修复在delphi数据浏览器上找不到: sqlite3. dll?

winapi - 使用鼠标滚轮调整文本大小时,TEXTMETRIC 给出错误的高度

delphi - Delphi中如何获取RichEdit的文本范围

c++ - Richedit Msftedit奇怪的边框

delphi - 线性变换函数

delphi - delphi如何自动完成?

windows - delphi中的多种形式

windows - Delphi,删除包含内容的文件夹