procedure TForm1.FormCreate(Sender: TObject);
var
txt: TextFile;
tempbuffer: widestring;
fs: TFileStream;
begin
Randomize();
tempbuffer := 's我工a1';
AssignFile(txt, ExtractFilePath(Application.ExeName) + '1.txt');
Rewrite(txt);
Writeln(txt, tempbuffer);
CloseFile(txt);
fs := TFileStream.Create(ExtractFilePath(Application.ExeName) + '2.txt',
fmCreate);
fs.Write(#$FF#$FE, 2);
fs.Write(tempbuffer[1], Length(tempbuffer) * 2);
fs.Free;
OldProc := Pointer(Windows.setwindowlong(self.Handle, Windows.GWL_WNDPROC,
longint(@NewProc)));end;
同样是写的widestring,1.txt里打开看是ansi,2.txt里打开看是正常的unicode,这是为什么?
var
txt: TextFile;
tempbuffer: widestring;
fs: TFileStream;
begin
Randomize();
tempbuffer := 's我工a1';
AssignFile(txt, ExtractFilePath(Application.ExeName) + '1.txt');
Rewrite(txt);
Writeln(txt, tempbuffer);
CloseFile(txt);
fs := TFileStream.Create(ExtractFilePath(Application.ExeName) + '2.txt',
fmCreate);
fs.Write(#$FF#$FE, 2);
fs.Write(tempbuffer[1], Length(tempbuffer) * 2);
fs.Free;
OldProc := Pointer(Windows.setwindowlong(self.Handle, Windows.GWL_WNDPROC,
longint(@NewProc)));end;
同样是写的widestring,1.txt里打开看是ansi,2.txt里打开看是正常的unicode,这是为什么?
解决方案 »
- [分享]用delphi实现的由一颗五角星爆炸成多个五角星的特效,代码仅6行
- 请问怎么实现IObjectSafety接口?delphi,vc均可。
- 一个小循环语句的写法 [ 求助]
- dbgrid 一个非常简单问题
- 【嘉宾聊天】4.28日Borland中国CTO李维先生畅谈技术--聊天记录!
- memo控件是否有大小限制,是否有没有存储量限制的第三方控件?
- 求救啊!关于不同数据库表的嵌套查询问题---急啊!!!!!1
- 在线等!!!!!!!(图像从sql中取出在报表中打印,用dbimage),为什么在98下有时打印出来,有时打不出来?
- 请大家帮帮忙
- 线程中动态创建TImage有特殊的要求吗
- 关于函数参数指针的使用
- 急急急~求高手幫我看下什麽錯誤
没有错误。只是用textfile写widestring,写进后,居然是ansi的。
procedure TForm1.FormCreate(Sender: TObject);
var
txt: TextFile;
tempbuffer: string;
fs: TFileStream;
stlist:TStringList;
begin
Randomize();
tempbuffer := 's我工a1';
AssignFile(txt, ExtractFilePath(Application.ExeName) + '1.txt');
Rewrite(txt);
Writeln(txt, tempbuffer);
CloseFile(txt);
fs := TFileStream.Create(ExtractFilePath(Application.ExeName) + '2.txt',
fmOpenRead);
fs.Write(#$FF#$FE, 2);
fs.Write(tempbuffer[1], Length(tempbuffer) * 2);
fs.Free;
stlist:=TStringList.Create;
stlist.Add(tempbuffer);
stlist.SaveToFile(ExtractFilePath(Application.ExeName)+'3.txt');
stlist.Free;end;再加一个stringlist的。1.txt和3.txt都是ansi2.txt是unicodewhy?
fmOpenRead);
这个是打开文件仅读的方式,文件必须先存在,且你写的内容只是到内存流,你怎么检查到这个文件是写到了UNICODE码?在你的代码中根本没有改变2.txt文件的代码(fs.Write(#$FF#$FE, 2);
fs.Write(tempbuffer[1], Length(tempbuffer) * 2);这个只是写到内存的文件流中)。
我用的是delphi xe
用AssignFile rewrite方式我也只会写入ANSI 暂时也没搞懂StringList就容易了 它可以设置编码//------ 字符串列表保存TXT文本 相比最简单
function SaveToTxt(const FN, Data: string): Boolean;
var
SS_Save: TStrings;
begin
Result := False;
SS_Save := TStringList.Create;
try
SS_Save.Text := Data;
SS_Save.SaveToFile(FN, TEncoding.Unicode);
if FileExists(FN) then
Result := True;
finally
FreeAndNil(SS_Save);
end;
end;文件流方式也还在试验中
用 TStreamWrite写 TStreamReader 读写不错
http://www.cnblogs.com/del/archive/2009/10/12.html//----- 保存到txt
function SaveToTxt(const FN, Data: string): Boolean;
var
FS: TStreamWriter;
begin
FS := TStreamWriter.Create(FN, True, TEncoding.Unicode); //True表追加文本
FS.WriteLine(Data); //函数重载 可以写入很多数据类型
//FS.Write(Data);
FS.Close;
FS.Free;
end;
想不明白的是XE中,string默认就是widestring.为什么用textfile还是ansi.
而stringlist也是默认wide的。居然也是ansi。难道是设计者为了方便大家使用?这样也太不规范了。