一个简单问题

risman 2007-02-07 10:00:17
我在使用Memo控件的时候,发现用
Memo1.Lines.LoadFromFile(OpenDialog.FileName);
打开一些同类型的文档,有些文档可以打开,但是有些是乱码,请问是怎么回事?
...全文
201 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
王集鹄 2007-02-07
  • 打赏
  • 举报
回复
//楼上已经说了
//一般通过开始几个字节判断

//Unicode存、取
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
W: WideString;
begin
if Memo1.Text = '' then Exit;
//存
with TMemoryStream.Create do try
S := #$FF#$FE;
Write(S[1], Length(S));
W := Memo1.Text;
Write(W[1], Length(W) * SizeOf(WideChar));
Position := 0;
SaveToFile('c:\temp\temp.txt');
finally
Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
S: string;
W: WideString;
begin
//取
if not FileExists('c:\temp\temp.txt') then Exit;
with TMemoryStream.Create do try
LoadFromFile('c:\temp\temp.txt');
if Size < 4 then Exit;
SetLength(S, 2);
Read(S[1], Length(S));
if Copy(S, 1, 2) <> #$FF#$FE then Exit;
SetLength(W, (Size - 2) div SizeOf(WideChar));
Read(W[1], Length(W) * SizeOf(WideChar));
Memo2.Text := W;
finally
Free;
end;
end;

//Utf8存、取
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
begin
//存
with TMemoryStream.Create do try
S := #$EF#$BB#$BF;
Write(S[1], Length(S));
S := AnsiToUtf8(Memo1.Text);
Write(S[1], Length(S));
Position := 0;
SaveToFile('c:\temp\temp.txt');
finally
Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
S: string;
begin
//取
if not FileExists('c:\temp\temp.txt') then Exit;
with TMemoryStream.Create do try
LoadFromFile('c:\temp\temp.txt');
SetLength(S, Size);
Read(S[1], Length(S));
if Copy(S, 1, 3) <> #$EF#$BB#$BF then Exit;
Memo2.Text := Utf8ToAnsi(Copy(S, 4, MaxInt));
finally
Free;
end;
end;

lihuasoft 2007-02-07
  • 打赏
  • 举报
回复
扩展名为.txt,不一定就是ASCII文本文件。
lihuasoft 2007-02-07
  • 打赏
  • 举报
回复
其道理就象用Windows记事本打开一些文件一样,以#13#10为换行的ASCII文本文件(常见的*.txt),可以正常显示,而不是这样的,一般会有乱码。
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 在Android系统应用程序开发过程中,有时需要为用户设计查看较大图像的界面,比如在照片库应用或电商产品详情界面。本案例主要介绍如何运用ViewPager组件实现左右滑动切换图片,同时结合手势操作支持图片的缩放功能。下面将详细阐述这一功能的实现细节: `ViewPager`是Android软件开发工具包中提供的一个控件,它能够让用户在多个页面之间进行左右滑动以切换内容。在本应用场景中,每个页面都将展示一张图片。`ViewPager`通过适配器(通常是一个继承自`PagerAdapter`的自定义类)来提供页面内容,适配器负责加载和管理图片数据。 为了实现图片查看大图并支持手势缩放,一般会用到`ImageView`组件和`ScaleGestureDetector`类。`ImageView`是用于显示图片的基本组件,而`ScaleGestureDetector`能够帮助我们识别用户的缩放手势,从而实现图片的放大和缩小操作。 实现这一功能的步骤如下: 1. 构建一个自定义的`PagerAdapter`子类,例如`ImagePagerAdapter`,它将负责将图片数据加载到`ViewPager`的各个页面中。在`Invalidate()`方法里,我们可以依据当前页的索引加载对应的图片资源。 2. 在`PagerAdapter`的`instantiateItem()`方法中,为每个页面创建一个新的`ImageView`实例,并将其添加到`ViewPager`的布局结构中。设定`ImageView`的初始图片资源。 3. 对每个`ImageView`,我们可以使用`GestureDet...

16,741

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧