用memo打开一个1。2M的文本文件乱码问题?(在线) 用memo打开一个1。2M的文本文件出现乱码,代码很简单:memo1.lines.LoadFromFile('d:\data\log\everyday.txt'); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Memo1.Font.Name = '宋体';Memo1.Font.Size := 9;Memo1.Font.Charset := GB2312_CHARSET;把这个加进去试试 你打开的文本是否是ansi字符集呢?还是unicode? 怎么看是否是ansi字符集呢?还是unicode?啊,有设置嘛? 看看你的文本文件是什么字符集,你用记事本打开,然后另存为最下面的那个地方,可以看到是什么字符集。。如果是unicode,那么你用DELPHI的memo读取,肯定是乱码。要转换一下。 按你的方法看了一下,果然是unicode,用delphi读取该怎么转换啊? function GetFileText(const FileName: string): string;var hFile: DWORD; iSize: DWORD; sTemp: string;begin // 打开文件 hFile := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); // 文件大小 iSize := GetFileSize(hFile, nil); // 申请内存 SetLength(sTemp, iSize + 2); // 读入文件 ReadFile(hFile, sTemp[1], iSize, iSize, nil); // 关闭文件 CloseHandle(hFile); // 置结束符 sTemp[iSize + 1] := #0; sTemp[iSize + 2] := #0; // 编码格式 if (sTemp[1] = #$FF) and (sTemp[2] = #$FE) then // UNICODE begin // 申请内存 SetLength(Result, iSize); // 转换编码 WideCharToMultiByte(CP_ACP, 0, PWideChar(@sTemp[3]), -1, @Result[1], iSize, nil, nil); end else Result := sTemp; // 去掉多余字符 Result := string(PChar(Result));end; memo1.text := GetFileText('d:\aa.txt'); //getfiletext的实现参见上面的 问一个组件循环的问题,请教了 一个网站转向问题 动态创建的Webbrowser无法响应DocumentComplete事件 多文档问题???高手过来! 是不是感觉程序员不如原来活的体面了?找到原因了。。。。。。 使用dbgrideh把数据导出到RTF文件中,发现中文为乱码,请帮忙 怎么判断但个字符在一个字符串里的个数?? Delphi是什么东东。是关于那方面的。其基础语言是什么。。有什么好处。。。??? 取绝对值是什么函数 请教,如何动态生成 接分接得手发酸~休息一下,放分恭喜老妖~ 恭喜CC新婚
Memo1.Font.Size := 9;
Memo1.Font.Charset := GB2312_CHARSET;
把这个加进去试试
var
hFile: DWORD;
iSize: DWORD;
sTemp: string;
begin
// 打开文件
hFile := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// 文件大小
iSize := GetFileSize(hFile, nil);
// 申请内存
SetLength(sTemp, iSize + 2);
// 读入文件
ReadFile(hFile, sTemp[1], iSize, iSize, nil);
// 关闭文件
CloseHandle(hFile);
// 置结束符
sTemp[iSize + 1] := #0;
sTemp[iSize + 2] := #0;
// 编码格式
if (sTemp[1] = #$FF) and (sTemp[2] = #$FE) then // UNICODE
begin
// 申请内存
SetLength(Result, iSize);
// 转换编码
WideCharToMultiByte(CP_ACP, 0, PWideChar(@sTemp[3]), -1, @Result[1], iSize, nil, nil);
end else
Result := sTemp;
// 去掉多余字符
Result := string(PChar(Result));
end;