Чтение и отображение файла UTF-8 в консоли (Pascal, Crt, Windows) - PullRequest
0 голосов
/ 30 апреля 2020

Мне посчастливилось использовать UTF8ToAnsi для чтения и правильного отображения текстового файла UTF-8. Однако при импорте модуля Crt WriteLn начинает извергать неверные гиббери sh и псевдографику.

Допустим, наш ввод rosé, водка and ούζο█, вывод будет ?rose, тюфър and ????- (? В начале из-за UTF-8 с спецификацией). При удалении блока Crt выводится ?rose, водка and ????-. Дело в том, что мне нужно, чтобы Crt делал такие вещи, как ClrScr.

Код, который я использую:

var
  openFile: TextFile;
  fileString: widestring;

begin
  Assign(openFile, 'UTF8.txt');
  Reset(openFile);
  fileString := '';
  ReadLn(openFile, fileString);
  Close(openFile);
  fileString := UTF8ToAnsi(fileString);
  WriteLn(fileString);
  ReadLn;
end.      

Больше всего меня интересует отображение текста в консоли (Windows 7), и это то, что терпит неудачу, потому что при подключении к выходному файлу он пишет почти то же самое, что отображалось без Crt.

Я уже пробовал SetConsoleOutputCP(CP_UTF8), который без Crt дал понять даже меньше символов (CP_UTF16, который предположительно работает в Юникоде, хотя) и с помощью Crt просто сделали никакого эффекта вообще. Я пытался сделать эту работу слишком долго, и у меня почти нет идей.

Я использую Free Pascal и не могу импортировать классы (вес 200 КБ) из-за по причинам совместимости.

...