Я пишу php-файл, но у меня возникла проблема именно в этой строке
Writeln(f,'<(meta http-equiv="Content-Type" content="text/html; charset=utf-8" /)>');
/note i used a coupla extra ( )
Это пишет глава моей веб-страницы.
Если я достану его, все персонажи будут идти гладко (Ç, é, ó, some others)
Но эта строка необходима для веб-страницы.
Не знаю что делать = /
Если у вас есть «новый» 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;
Вы пишете файлы, используя Writeln
что является наследием ввода / вывода Паскаля. Это не поддерживает 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.
Как указывает Ян, это создаст спецификацию, которая вам не нужна. Таким образом, вы можете получить класс кодирования, который не излучает спецификацию.
type
TUTF8EncodingWithoutBOM = class(TUTF8Encoding)
public
function GetPreamble: TBytes; override;
end;
function TUTF8EncodingWithoutBOM.GetPreamble: TBytes;
begin
Result := nil;
end;
При инициализации создайте один глобальный экземпляр этого класса и передайте его потоковому модулю записи.