我正在写一个php文件,但是在这一行有一个问题
Writeln(f,'<(meta http-equiv="Content-Type" content="text/html; charset=utf-8" /)>');
/note i used a coupla extra ( )上面写着我的网页标题。
如果我把它拿出来,所有的字符都可以流畅地进行(Ç, é, ó, some others),但这一行对网页来说是必要的。
不知道该怎么办=/
发布于 2014-10-09 13:35:32
如果你有一个“新的”Delphi (2009+),你可以使用TStringlist来构建你的php文件。
var
myPhpFile: TStringlist;
begin
myPhpFile := TStringlist.Create;
try
myPhpFile.Add('<(meta http-equiv="Content-Type" content="text/html; charset=utf-8" /)>');
myPhpFile.SaveToFile('myFile.php', TEncoding.UTF8);
finally
myPhpFile.Free;
end;
end;发布于 2014-10-09 14:36:03
您正在使用Writeln编写文件,这是遗留的Pascal I/O。这不支持Unicode,您需要使用不同的方法编写文件。
最明显的方法是使用流编写器类:
Output := TFileStream.Create(...);
Writer := TStreamWriter.Create(Output, TEncoding.UTF8);
Writer.WriteLine(
'<(meta http-equiv="Content-Type" content="text/html; charset=utf-8" /)>'
);传递给编写器的构造函数的编码参数可确保编写器使用正确的文本编码(本例中为UTF-8 )对文本进行编码。
正如Jan所指出的,这将发出一个BOM,这是您不想要的。因此,您可以派生一个不发出BOM的编码类。
type
TUTF8EncodingWithoutBOM = class(TUTF8Encoding)
public
function GetPreamble: TBytes; override;
end;
function TUTF8EncodingWithoutBOM.GetPreamble: TBytes;
begin
Result := nil;
end;在初始化时创建此类的单个全局实例,并将其传递给流编写器。
https://stackoverflow.com/questions/26270622
复制相似问题