首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用delphi编写文本时的编码问题

问使用delphi编写文本时的编码问题
EN

Stack Overflow用户
提问于 2014-10-09 12:56:01
回答 2查看 620关注 0票数 2

我正在写一个php文件,但是在这一行有一个问题

代码语言:javascript
复制
Writeln(f,'<(meta http-equiv="Content-Type" content="text/html; charset=utf-8" /)>');
/note i used a coupla extra ( )

上面写着我的网页标题。

如果我把它拿出来,所有的字符都可以流畅地进行(Ç, é, ó, some others),但这一行对网页来说是必要的。

不知道该怎么办=/

EN

回答 2

Stack Overflow用户

发布于 2014-10-09 13:35:32

如果你有一个“新的”Delphi (2009+),你可以使用TStringlist来构建你的php文件。

代码语言:javascript
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2014-10-09 14:36:03

您正在使用Writeln编写文件,这是遗留的Pascal I/O。这不支持Unicode,您需要使用不同的方法编写文件。

最明显的方法是使用流编写器类:

代码语言:javascript
复制
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的编码类。

代码语言:javascript
复制
type
  TUTF8EncodingWithoutBOM = class(TUTF8Encoding)
  public
    function GetPreamble: TBytes; override;
  end;

function TUTF8EncodingWithoutBOM.GetPreamble: TBytes;
begin
  Result := nil;
end;

在初始化时创建此类的单个全局实例,并将其传递给流编写器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26270622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档