用memo打开一个1。2M的文本文件出现乱码,
代码很简单:memo1.lines.LoadFromFile('d:\data\log\everyday.txt');

解决方案 »

  1.   

    Memo1.Font.Name = '宋体';
    Memo1.Font.Size := 9;
    Memo1.Font.Charset := GB2312_CHARSET;
    把这个加进去试试
      

  2.   

    你打开的文本是否是ansi字符集呢?还是unicode?
      

  3.   

    怎么看是否是ansi字符集呢?还是unicode?啊,有设置嘛?
      

  4.   

    看看你的文本文件是什么字符集,你用记事本打开,然后另存为最下面的那个地方,可以看到是什么字符集。。如果是unicode,那么你用DELPHI的memo读取,肯定是乱码。要转换一下。
      

  5.   

    按你的方法看了一下,果然是unicode,用delphi读取该怎么转换啊?
      

  6.   

    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;
      

  7.   

    memo1.text := GetFileText('d:\aa.txt');  //getfiletext的实现参见上面的