delphi 在用记事本生成txt文件时如何控制"另存为"里的"编码"选项?
我想控制编码为UTF-8不是ANSI等其它编码,谢谢!!
我想控制编码为UTF-8不是ANSI等其它编码,谢谢!!
解决方案 »
- 在线程中shomodal窗口,为何不是modal方式显示,而是类似show方式显示
- 关于ListBox的问题
- 有没有人会用WINDOWS MEDIA CODE SDK?
- 我想让DBGrid的某一条数据可以被更改,要怎么写?
- 我的机器上装了mdac 2.6版本,原来用2.1ado写的程序用不了,怎么从2.6转到2.1
- 如何配置ODBC
- 请教大虾: 如何将DBLookupCombobox控件初始化为数据源的第一条记录字段的内容?
- 怪问题,大虾们帮忙
- delphi是否对一个单元的变量总数作限制
- 想把DAT文件写到Memo里,但是读取数组数据类型与string转换不会,请教大佬
- 在DELPHI中如何改变VFP数据库的表结构?
- SQLQuery Insert 出错:'不正常的定义参数对象 提供了不一致或不完整的信息'
我想控制编码为UTF-8不是ANSI等其它编码,谢谢!!
我想选择编码为UTF-8不是ANSI等其它编码.
代码转换要怎么写啊?
各位大虾帮帮忙啊!!
procedure TForm1.Button1Click(Sender: TObject);
var F:textfile;
begin
assignfile(F,'c:\test.txt');
rewrite(F);
Writeln(F,'我再来试试编码转换');
closefile(F);
end;
end.
生成的test.txt是以ANSI编码写的.
我还写了一段程序代码:
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('我来试试编码转换');
Write(S[1], Length(S));
Position := 0;
SaveToFile('c:\test.txt');
finally
free;
end;
end;
end.
生成的test.txt是以UTF-8编码写的.
现在关键是怎么样在第一段程序中修改使ANSI编码转为UTF-8编码?
高手们能帮帮忙,谢谢!
var S:string;
begin
with TMemoryStream.Create do try
S := #$EF#$BB#$BF;
Write(S[1], Length(S));
S := AnsiToUtf8('我来试试编码转换');
Write(S[1], Length(S));
Position := 0;
SaveToFile('c:\test.txt');
finally
free;
end;
end;
end.
这个不就可以吗?
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;要在文件对话框中加一个选项挺难,这得参考TOpenPictureDialog的封装
我现在关键是想问由下面程序:
procedure TForm1.Button1Click(Sender: TObject);
var F:textfile;
begin
assignfile(F,'c:\test.txt');
rewrite(F);
Writeln(F,'我再来试试编码转换');
closefile(F);
end;
end.
形成的c:\test.txt文件,怎么进行编码转换.
即在上面程序的基础上进行修改,而不是重新写成:
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('我再来试试编码转换');
Write(S[1], Length(S));
Position := 0;
SaveToFile('c:\test.txt');
finally
free;
end;
end;
end.
的形式;
关键是怎么样在第一段程序中修改使ANSI编码转为UTF-8编码,高手们帮帮忙?
因为我实际形成的c:\test.txt文件很大,并且是通过较为复杂的分步骤多次写入形成,只是编码为ANSI,我现在就是想把这个已经形成的编码为ANSI的c:\test.txt文件,通过修改程序改变为UTF-8编码形式.
所以,简要的写了第一段小程序,看看高手们能不能帮帮忙,在第一段小程序中修改,使c:\test.txt文件成为编码为UTF-8的形式.谢谢!
而在gb2312中一个汉字占2个字节。所以,这样编码转换只要出现汉字则文件大小必然发生变化。
如果文件在1M左右,基本没有感觉,测试上面的代码再说吧。
生成其它格式的文件时,需要先指定编码
var
F : Integer;
EncodeFlag : array [0..2] of Byte;
s : UTF8String;
begin
EncodeFlag[0] := $ef;
EncodeFlag[1] := $bb;
EncodeFlag[2] := $bf;
(**************************************************
ansi 没有标记
Unicode $FF $FE
Unicode big endian $FE $FF
UTF-8 $EF $BB $BF
**************************************************)
F := FileCreate('D:\utf8.txt');
FileSeek(F,0,0);
FileWrite(F,EncodeFlag,Length(EncodeFlag));
s := AnsiToUtf8('中文测试');
FileWrite(F,s[1],Length(s));
FileClose(F);
end;
也可以使用readln一次读取一行,传给AnsiToUtf8,再写入目标文件
我是一个delphi初学者,请问如何用TStringList一次读取整个文件?
比如说:用TStringList如何读取'D:\utf8.txt'中的'中文测试'呢??
var
AnsiFile : TStringList;
AnsiText : string; Utf8File : Integer;
EncodeFlag : array [0..2] of Byte;
Utf8Text : UTF8String;
iFileLen : Integer;
begin
if FileExists('D:\ansi.txt') then
DeleteFile('D:\ansi.txt'); AnsiFile := TStringList.Create; //创建ansi文件
AnsiFile.Add('中文测试');
AnsiFile.SaveToFile('D:\ansi.txt'); //读ansi文件
AnsiFile.LoadFromFile('D:\ansi.txt');
AnsiText := AnsiFile.Text; AnsiFile.Free; //创建utf8文件
EncodeFlag[0] := $ef;
EncodeFlag[1] := $bb;
EncodeFlag[2] := $bf; Utf8File := FileCreate('D:\utf8.txt');
FileSeek(Utf8File,0,0);
FileWrite(Utf8File,EncodeFlag,Length(EncodeFlag)); //ansi转换成utf8
Utf8Text := AnsiToUtf8(AnsiText); //写Utf8文件
FileWrite(Utf8File,Utf8Text[1],Length(Utf8Text));
FileClose(Utf8File);
Utf8Text := ''; //读取Utf8文件
Utf8File := FileOpen('D:\utf8.txt',fmOpenRead);
iFileLen := FileSeek(Utf8File,0,2);
FileSeek(Utf8File,3,0);
SetLength(Utf8Text,iFileLen-3);
FileRead(Utf8File,Utf8Text[1],iFileLen-3); //显示读取到的文本
AnsiText := Utf8ToAnsi(Utf8Text);
ShowMessage(AnsiText);